0

ユーザーが数値データを含むテーブルへのエントリを編集できるようにする場合(ユーザーはテーブルセルをクリックしてから、その子ビューで数値を入力し、メインテーブルビューに戻ります)、 NSMutabaleArrayにエントリを追加するだけだと思っていました。もしそうなら、ユーザーがアプリケーションを離れるとき、それらの値はまだそこにありますか?もしそうなら、配列を解放するclear tableメソッドも必要ですか?ありがとう。

4

2 に答える 2

2

アプリのデータは自動的に保持されません。

少量のデータがある場合は、配列などのコレクションを、アプリの Documents ディレクトリにあるプロパティ リスト(plist) ファイルに書き出すことができます。

大量のデータがある場合は、Core Data を使用することをお勧めします。

于 2009-12-24T18:31:31.523 に答える
0

手っ取り早い方法は、NSKeyedArchiver を使用して NSArray をファイルに書き出すことです。アプリの起動時に、ファイルからデータを NSArray に読み込む必要があります。

ここにスニペットがあります:

これにより、ドキュメント パスが取得されます。

- (NSString*)pathForDataFile
{
    //Get the path of the Documents directory
    NSArray* paths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES );
    NSString* documentsDirectory = [paths objectAtIndex: 0]; //Path to the documents directory

    //Get the path to my file in /Documents  
    NSString* documentsPath = [documentsDirectory stringByAppendingPathComponent: 
                               [NSString stringWithFormat: @"%@.plist", @"FileName"]];

    return documentsPath;
}

これらは保存してロードします:

- (BOOL)saveDataToDisk
{
    NSString* path = [self pathForDataFile];

    NSMutableDictionary* rootObject = [NSMutableDictionary dictionary];

    if ( self.yourArray )
        [rootObject setValue: self.powerListCollection.items forKey: kYourKey];

    [NSKeyedArchiver archiveRootObject: rootObject toFile: path];

    return YES;
}

-

- (BOOL)loadDataFromDisk
{
    NSString* path = [self pathForDataFile];
    NSFileManager* manager = [NSFileManager defaultManager];

    if ( [manager fileExistsAtPath: path] )
    {
        NSLog( @"Saved data found, loading data from %@", path );

        NSMutableDictionary* rootObject = nil;
        rootObject = [NSKeyedUnarchiver unarchiveObjectWithFile: path]; 

        NSArray* self.yourArray = [rootObject objectForKey: kYourKey];

    }
    else
    {
        NSLog( @"No saved data, initializing objects with default values." );
    }

    return YES;
}

objectForKey から返されたものはすべて保持する必要があることに注意してください。

于 2009-12-24T20:23:02.407 に答える