我一直有这个问题试图解决它,没有运气。
我有一个通过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。
显然我想首先弄清楚导致腐败的原因,但是如何判断数据是否无效以便应用程序不会崩溃?