0

この配列はサーバーからコンテンツを取得し、アプリを開くたびにそのデータをリロードしたくないため、複数の NSMutableArray を保存してロードしたいと考えています。最初にパスを宣言しました:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
     NSString *documentsDirectory = [paths objectAtIndex:0];
     NSString *firstPath = [documentsDirectory stringByAppendingPathComponent:@"first"];
     NSString *secondPath = [documentsDirectory stringByAppendingPathComponent:@"second"];
     NSString *thirdPath = [documentsDirectory stringByAppendingPathComponent:@"third"];
     NSString *fourthPath = [documentsDirectory stringByAppendingPathComponent:@"fourth"];

次に、NSMutableArrays を保存します。

         [firstArray writeToFile:firstPath atomically:YES];
         [secondArray writeToFile:secondPath atomically:YES];
         [thirdArray writeToFile:thirdPath atomically:YES];
         [fourthArray writeToFile: fourthPath atomically:YES];

次に、これらのファイルを他の NSMutableArrays で開きます。

    firstArrayget = [NSMutableArray arrayWithContentsOfFile:firstPath];
    secondArrayget = [NSMutableArray arrayWithContentsOfFile:secondPath];
    thirdArrayget = [NSMutableArray arrayWithContentsOfFile:thirdPath];
    fourthArrayget = [NSMutableArray arrayWithContentsOfFile:fourthPath];

次に、これらの配列 (...Arrayget、つまり firstArrayget) を TableView にロードしようとしました。

データは TableView に読み込まれますが、下にスクロールするとアプリがエラーでクラッシュします。

*** -[CFArray objectAtIndex:]: message sent to deallocated instance 0x930fc80

およびファイル内:

Thread 1:EXC_BREAKPOINT(code=EXC_1386_BPT,subcode=0x0)

しかし、TableView が (...Array、つまり firstArray) からデータをロードすると言うと、サーバーからダウンロードされたデータは保存されません。

4

1 に答える 1

0

ARCではなくMRCを使用していると仮定すると
、 ivar を autoreleased に設定しているようですNSMutableArray
sを呼び出しretainてみてくださいNSMutableArray。そうしないと、NSMutableArrays が解放され、autoreleasepool が空になったときに割り当てが解除されます。NSMutableArray別の解決策は、次のよう に各 にプロパティを使用することです。

// Create a property in your header file
@property (retain) NSMutableArray *firstArrayget;

// And set the property in your method
[self setFirstArrayGet:[NSMutableArray arrayWithContentsOfFile:firstPath]];

Objective-C のメモリ管理の詳細については、https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.htmlを参照してください。

于 2013-03-11T19:09:40.280 に答える