0

如果我希望用户能够编辑包含数字数据的表格的条目(用户将单击表格单元格,然后在该子视图上,他们将输入一个数字,然后返回主表格视图),我在想我只是将条目添加到 NSMutabaleArray。如果是这样,当用户离开应用程序时,这些值是否仍然存在?如果是,我是否还需要一个清晰的表方法来释放数组?谢谢。

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 回答