3

私はこの問題を何日も解決しようとしていますが、運がありません。

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 を確認しました。

明らかに、そもそも破損の原因を突き止めたいのですが、アプリがクラッシュしないようにデータが有効でないかどうかを確認するにはどうすればよいですか?

4

0 に答える 0