Есть вопрос по сохранению в плист - PullRequest
0 голосов
/ 22 июля 2011

У меня есть .plist, заполненный данными, которые поставляются с моим приложением.

Это в основном массив словарей с другими массивами / словарями в нем.

Значения, которые я беру из этого массива и использую в моем приложении, могут быть именами, поэтому "Компьютер".

Я добавляю функцию, позволяющую пользователю создавать свой собственный элемент вместо выбора из того, что загружается из массива. Но следует ли мне затем сохранить этот элемент в том же .plist или создать отдельный .plist для каждого пользователя?

Тогда, как мне извлечь информацию из стандартного .plist и созданного пользователем .plist и загрузить их в один tableView?

1 Ответ

2 голосов
/ 22 июля 2011

Если вы пишете для iOS, вы не можете сохранить в тот же файл plist, потому что не можете записать в пакет приложений.
Единственное, что вы можете сделать, это сохранить копию этого списка в папку «Документы» приложения, а затем изменить этот же список, чтобы все ваши данные были объединены в один файл.
Или вы всегда можете загрузить исходный список из пакета приложения, создать изменяемую копию NSArray, загрузить дополнительный список из папки «Документы» с объектами пользователя и добавить их в NSMutableArray, вызвав addObjectsFromArray.
Или вы можете даже хранить их в отдельном NSArray, но отображать их в табличном представлении как единое целое, возвращая [originalDataArray count] + [userDataArray count] из метода tableView:numberOfRowsInSection: вашего источника данных табличного представления и, конечно, использовать соответствующие данные в tableView:cellForRowAtIndexPath: способ.

EDIT:

Что касается сохранения пользовательских данных, вам не обязательно беспокоиться о написании списков.
NSArray соответствует протоколу NSCoding, как и NSDictionary, что означает, что вы можете легко сохранить его и загрузить, используя что-то вроде NSKeyedArchiver класса.

Вот пример чего-то, что у меня было в моем старом проекте, где у меня был NSMutableArray, который содержал некоторые пользовательские данные, и я сохранил их и загрузил их с NSKeyedArchiver (упрощено, чтобы показывать только соответствующий код и было сделано более года назад, когда я только начинал с ios, так что, возможно, это не самый лучший способ сделать это):

- (BOOL) saveData
{
    BOOL success = NO;

    NSArray *pathList = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, NO);

    NSString *path = [[[pathList objectAtIndex:0] stringByAppendingPathComponent:@"data.txt"] stringByExpandingTildeInPath];

    success = [NSKeyedArchiver archiveRootObject:myArray toFile:path];
    //note: myArray is an NSMutableArray, could be an NSArray

    return success;
}


- (BOOL) loadData
{
    BOOL success = NO;

    NSArray *pathList = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, NO);

    NSString *path = [[[pathList objectAtIndex:0] stringByAppendingPathComponent:@"data.txt"] stringByExpandingTildeInPath];

    if( (myArray = [NSKeyedUnarchiver unarchiveObjectWithFile:path]) )
    {
        [myArray retain];
        success = YES;
    }
    else
    {
        myArray = [[NSMutableArray alloc] init];
        success = NO;
    }

    return success;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...