私はこの問題を何日も解決しようとしていますが、運がありません。
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 が発生します。
ユビキタス コンテナ内のデータが何らかの形で破損しますが、他のデバイスには拡散せず、他のすべてのデバイスはコンテンツを正常にロードします。デバイスからアプリを削除しても問題は解決しません。ドキュメントを別のデバイスに再保存した場合にのみ、最終的に機能します。私はARCを使用しているので、それは問題ではありません。true を返す NSURLUbiquitousItemIsDownloadedKey を確認しました。
明らかに、そもそも破損の原因を突き止めたいのですが、アプリがクラッシュしないようにデータが有効でないかどうかを確認するにはどうすればよいですか?