UIDocument loadFromContents内容是否已损坏EXC_BAD_ACCESS?

时间:2013-03-04 21:20:39

标签: ios objective-c cocoa-touch icloud

我一直有这个问题试图解决它,没有运气。

我有一个通过iCloud同步的UIDocument, 这是方法

- (id)contentsForType:(NSString *)typeName error:(NSError *__autoreleasing *)outError {

    NSMutableData *data = [NSMutableData data];
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
    [archiver encodeObject:name forKey:@"name"];
    [archiver encodeObject:note forKey:@"note"];
    [archiver finishEncoding];
    return data;
}

- (BOOL)loadFromContents:(NSData *)contents ofType:(NSString *)typeName error:(NSError *__autoreleasing *)outError {
    NSLog(@"%@", [contents bytes]);
    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:contents];
    name = [unarchiver decodeObjectForKey:@"name"];
    note = [unarchiver decodeObjectForKey:@"note"];
    [unarchiver finishDecoding];

    return YES;
}

正如你所看到的,我在内容上做了一个NSLog,大多数时候,一切都很好。并且它正确加载,但是当数据损坏时,即使只是执行NSLog,我也会得到EXC_BAD_ACCESS。

ubiquity容器中的数据以某种方式被破坏,但是它没有传播到其他设备,所有其他设备都会加载内容。从设备删除应用程序无法解决问题。只有当我将文档重新保存在另一台设备上时才会最终正常工作。 我正在使用ARC,所以不应该是问题。 我检查了返回true的NSURLUbiquitousItemIsDownloadedKey。

显然我想首先弄清楚导致腐败的原因,但是如何判断数据是否无效以便应用程序不会崩溃?

0 个答案:

没有答案