我有一个“doesNotRecognizeSelector”异常,我怀疑我的解压器可能返回不可变数组而不是可变数组。 我对吗 ?我应该如何正确地归档和归档? (异常(exception)的地方是show down)
谢谢!!!
NSMutableArray* arr;
- (void) write
{
NSMutableData *data = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
NSMutableArray *copy = [[NSMutableArray arrayWithArray:self.Arr] copy];
[archiver encodeObject:copy forKey:@"Key"];
[archiver finishEncoding];
[data writeToFile:[Util DataPath] atomically:YES];
[archiver release];
[data release];
[copyOfPaidPacks release];
}
-(NSMutableArray*) read
{
NSString* DataPath = [Util FilePath];
NSData *data = [[NSMutableData alloc] initWithContentsOfFile:DataPath];
NSKeyedUnarchiver *unarchiver = nil;
if (data != nil)
{
unarchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:data];
if([self.Arr count] <= 0)
{
self.Arr = [unarchiver decodeObjectForKey:@"Key"];
}
}
[unarchiver finishDecoding];
[unarchiver release];
[data release];
return self.arr
}
-(void)B
{
[self write];
NSMutableArray* SecondArr = [self read];
[SecondArr sortUsingSelector:@selector(CompareDate:)]; - > `****THIS IS WHERE I GET THE EXCEPTION`
}
- 编辑
添加比较方法:
- (NSComparisonResult)CompareDate:(T*)p
{
NSComparisonResult result = [self.changeDate compare:p.changeDate];
if(result == NSOrderedDescending)
result = NSOrderedAscending;
else if(result == NSOrderedAscending)
result = NSOrderedDescending;
if(result == NSOrderedSame)
{
result = [self CompareName:p];
}
return result;
}
最佳答案
NSKeyedUnarchiver
确实返回了一个不可变的 NSArray
。如果你真的想得到一个 NSMutableArray
,你需要在 decodeObjectForKey:
的返回值上调用 -mutableCopy
。
这个代码片段让我想知道你是否真的需要一个可变数组。看起来您只是对从 -read
获得的数组进行排序。为什么不直接在不可变的 NSArray 上调用 sortedArrayUsingSelector:
?
关于iphone - 存档可变数组 - doesNotRecognizeSelector 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4501031/