【发布时间】:2013-10-17 15:47:18
【问题描述】:
我有一个符合 NSCoding 协议的自定义类,但在我调用 write to file 时仍然拒绝编码。
@implementation PXLevel
- (id)initWithName:(NSString *)name andArray:(NSMutableArray *)map {
self = [super init];
self.name = name;
self.map = map;
return self;
}
- (id)initWithName:(NSString *)name {
self = [super init];
self.name = name;
NSMutableArray *tempArray = [[NSMutableArray alloc] init];
for (int i = 0; i < 8; i++) {
NSMutableArray *line = [[NSMutableArray alloc] init];
for (int j = 0; j < 8; j++) {
[line addObject:@"grass"];
}
[tempArray addObject:line];
}
self.map = tempArray;
return self;
}
-(void) encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.name forKey:@"levelName"];
[aCoder encodeObject:self.map forKey:@"levelMap"];
}
-(id) initWithCoder:(NSCoder *)aDecoder
{
if((self = [super init]))
{
self.name = [aDecoder decodeObjectForKey:@"levelName"];
self.map = [[aDecoder decodeObjectForKey:@"levelMap"] mutableCopy];
}
return self;
}
如您所见,变量 map 是一个包含字符串的多维数组。不知道这是搞砸了还是什么。
顺便说一句我的界面
@interface PXLevel : NSObject <NSCoding>
@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSMutableArray *map;
- (id)initWithName:(NSString *)name andArray:(NSMutableArray *)map;
- (id)initWithName:(NSString *)name;
【问题讨论】:
-
你在什么对象上调用
writeToFile:?它与您的PXLevel课程有何关系? -
具体来说,一个可变的 PXLevel 对象数组(上面的实现)。我检查了代码,该方法可以将一个空数组保存到一个新的 plist,但添加一个 PXLevel 并没有任何反应。
标签: objective-c serialization encoding nscoding