1

配列をコアデータに保存する必要があるので、NSDataを使用できることを読みました。ですから、アーカイブに問題があると思います。

NSMutableArray *newArray = [[NSMutableArray alloc]init];
NSData *newData = [NSKeyedArchiver archivedDataWithRootObject:newArray];
[myEntity setValue:newData forKey:@"nameOfMyData"];

次に、別のVIewControllerで配列を選択して入力しようとします

NSData *newdata = [NSData dataWithData:self.myEntity.nameOfMyData];
NSMutableArray *photoArray = [[NSMutableArray alloc]init];
photoArray = [NSKeyedUnarchiver unarchiveObjectWithData:newdata];

クラッシュはありませんが、コマンドラインで次に表示されます:

[NSKeyedUnarchiver initForReadingWithData:]: data is empty; 
did you forget to send -  finishEncoding to the NSKeyedArchiver?

そして、オブジェクトを配列に追加しようとしても、追加されません

[photoArray addObject:myImage];

したがって、myImageが作成されており、問題はありませんが、デバッガーでは常にphotoArray用に記述します。

photoArray = (NSMutableArray*) 0x00000000 0 objects
4

1 に答える 1

3

動作するはずです。ただし、アレイのアーカイブを解除する場合は、次を使用します。

NSData *newdata = [NSData dataWithData:self.myEntity.nameOfMyData];
NSMutableArray *photoArray = [NSMutableArray arrayWithArray: [NSKeyedUnarchiver unarchiveObjectWithData:newdata]];

NSCodingプロトコルに準拠していないオブジェクトが配列にあるか、コアデータコンテキストを保存していません(または保存に失敗しています)。

でアーカイブした後

NSData *newData = [NSKeyedArchiver archivedDataWithRootObject:newArray];

newDataでnilをチェックすると、何が表示されますか?ゼロだと思います。

于 2012-12-17T19:11:41.770 に答える