Если вы пишете для 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;
}