-1

これは私のコードです:

array = [[NSMutableArray alloc] init];



NSArray *paths = NSSearchPathForDirectoriesInDomains
(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];


//make a file name to write the data to using the
//documents directory:
NSString *fullFileName = [NSString stringWithFormat:@"%@/file", documentsDirectory];

array = [NSKeyedUnarchiver unarchiveObjectWithFile:fullFileName];

私のコードの何が問題になっていますか?

これはエラーです

[__NSArrayM count]: message sent to deallocated instance 0xd5864e0
4

1 に答える 1

1

ステートメント

array = [NSKeyedUnarchiver unarchiveObjectWithFile:fullFileName];

最初の適切な時点で割り当てが解除される自動解放オブジェクトが返されます。したがって、後でそのcountメソッドにアクセスすると、オブジェクトはもう存在しません。これがクラッシュの原因です。

これを修正する方法は、アレイを適切に管理して、必要な限りアレイがそこにとどまるようにすることです。ARCを使用している場合、これはstrongプロパティを介してオブジェクトを管理することを意味する場合があります。ARCを使用していない場合、これには。の使用が含まれretainます。あなたはどのようarrayに宣言されるかを指定しないので、私はより正確にすることはできません。

プロパティが次のように宣言されていると言うので:

@property (nonatomic,retain) NSMutableArray *array

単に行う:

self.array = [NSKeyedUnarchiver unarchiveObjectWithFile:fullFileName];

問題を修正する必要があります。

于 2012-07-29T10:32:04.400 に答える