首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSCoder编码器问题

NSCoder编码器问题
EN

Stack Overflow用户
提问于 2015-12-11 00:55:40
回答 1查看 154关注 0票数 0

这是我下面的代码,我想对这个文件使用单元测试,而不是其他。我想知道是否可以在XCTest中对这段代码进行单元测试。

代码语言:javascript
复制
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface Presenter : NSObject
@property (nonatomic, retain) NSString *Name;
@property (nonatomic, retain) NSString *Topic;
@property (nonatomic, retain) NSString *Date;
@property (nonatomic, retain) NSString *Time;
@property (nonatomic, retain) NSString *Location;
@property (nonatomic, retain) UIImage *image;
@property (nonatomic, retain) NSMutableDictionary *rattings;
@property (nonatomic, assign) BOOL isLiked;



@end

这是M文件:

代码语言:javascript
复制
#import "Presenter.h"

@implementation Presenter

- (id) initWithCoder: (NSCoder *)coder
{
    if (self = [super init])
    {
        self.Name = [coder decodeObjectForKey:@"Name"];
        self.Topic = [coder decodeObjectForKey:@"Topic"];
        self.Date = [coder decodeObjectForKey:@"Date"];
        self.Time = [coder decodeObjectForKey:@"Time"];
        self.Location = [coder decodeObjectForKey:@"Location"];
        self.image = [coder decodeObjectForKey:@"image"];
        self.rattings = [coder decodeObjectForKey:@"rattings"];
        self.isLiked = [coder decodeBoolForKey:@"isLiked"];

    }

    return self;


}

- (void) encodeWithCoder: (NSCoder *)coder
{
    [coder encodeObject: self.Name forKey:@"Name"];
    [coder encodeObject: self.Topic forKey:@"Topic"];
    [coder encodeObject: self.Date forKey:@"Date"];
    [coder encodeObject: self.Time forKey:@"Time"];
    [coder encodeObject: self.Location forKey:@"Location"];
    [coder encodeObject: self.image forKey:@"image"];
    [coder encodeObject: self.rattings forKey:@"rattings"];
    [coder encodeBool: self.isLiked forKey:@"isLiked"];

}


@end

我发现这是关于NScoder单元测试的

如何对NSCoding进行单元测试?

并试图应用它,但是我的尝试给出了错误:捕捉到"NSInvalidArgumentException","-__NSCFConstantString countByEnumeratingWithState:objects:count:un为人所识别的选择器“

代码语言:javascript
复制
- (void)testName {
    NSLog(@"%@ start", self.name);   // self.name is the name of the test-case method.
    NSKeyedArchiver *archive = [[NSKeyedArchiver alloc] initForWritingWithMutableData:(NSMutableData *)presenter];
    [archive encodeObject:presenter forKey:@"Name"];
    for (NSString *Name in presenter.Name) {
        [archive encodeObject:[presenter valueForKey:Name] forKey:@"Name"];
    }
    XCTAssertTrue([[presenter Name] isEqualToString:@"Name"], "Name");
    NSLog(@"%@ end", self.name);
}
EN

回答 1

Stack Overflow用户

发布于 2015-12-11 02:32:28

您应该从阅读文件开始学习如何使用NSKeyedArchiverNSKeyedUnarchiver

下面是您的方法应该是什么样子:

代码语言:javascript
复制
- (void)testName
{
    NSLog(@"%@ start", self.name);   // self.name is the name of the test-case method.

    Presenter *presenter = [[Presenter alloc] init];
    presenter.Name = @"John";
    NSMutableData *presenterData = [NSMutableData data];

    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:presenterData];
    [archiver encodeObject:presenter forKey:@"presenter"];
    [archiver finishEncoding];

    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:presenterData];
    Presenter *decodedPresenter = [unarchiver decodeObjectForKey:@"presenter"];
    [unarchiver finishDecoding];

    XCTAssertTrue([decodedPresenter.Name isEqualToString:presenter.Name], "Name");

    NSLog(@"%@ end", self.name);
}

但是,您可以使用工厂方法以一种简单得多的方式完成这一任务:

代码语言:javascript
复制
- (void)testName
{
    NSLog(@"%@ start", self.name);   // self.name is the name of the test-case method.

    Presenter *presenter = [[Presenter alloc] init];
    presenter.Name = @"John";

    NSData *presenterData = [NSKeyedArchiver archivedDataWithRootObject:presenter];
    Presenter *decodedPresenter = [NSKeyedUnarchiver unarchiveObjectWithData:presenterData];

    XCTAssertTrue([decodedPresenter.Name isEqualToString:presenter.Name], "Name");

    NSLog(@"%@ end", self.name);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34214497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档