iphone - 存档可变数组 - doesNotRecognizeSelector 异常

标签 iphone objective-c cocoa-touch immutability archiving

我有一个“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/

相关文章:

ios - UITableViewCell 在运行 iOS 11 的 iPhone X 上无法正确调整大小

objective-c - NSViewController loadView 加载了 "(null)"nib 但没有设置 View

cocoa-touch - 如何在objective-c中隐藏键盘

ios - Storyboard的 View 与模拟器的 View 不同

objective-c - 测量 iPhone 中的上传和下载速度

iOS - 资源内容可供公众访问

iphone - 核心图 - 绘图标签的小数位数

iphone - 核心数据一对多关系

iphone - 具有多个 Nib 的单一 View Controller ?

iphone - 分配,可变到不可变数组?