Во-первых вы не можете писать что-либо в вас mainBundle. Чтобы вы могли написать вам plist, вам нужно скопировать его в каталог документов. Это делается так:
- (void)createEditableCopyOfIfNeeded
{
// First, test for existence.
BOOL success;
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *writablePath = [documentsDirectory stringByAppendingPathComponent:@"Template.plist"];
success = [fileManager fileExistsAtPath:writablePath];
if (success)
return;
// The writable file does not exist, so copy from the bundle to the appropriate location.
NSString *defaultPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Template.plist"];
success = [fileManager copyItemAtPath:defaultPath toPath:writablePath error:&error];
if (!success)
NSAssert1(0, @"Failed to create writable file with message '%@'.", [error localizedDescription]);
}
Таким образом, вызов этой функции проверяет наличие файла в каталоге документов. Если он не копирует файл в каталог документов. Если файл существует, он просто возвращается. Затем вам просто нужно получить доступ к файлу, чтобы он мог читать и писать. Для доступа вам нужен только путь к каталогу документов и добавление имени файла в качестве компонента пути.
NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *filePath = [docDir stringByAppendingPathComponent:@"Template.plist"];
Чтобы получить данные из списка свойств:
NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:filePath];
Чтобы записать файл обратно в каталог документов.
[array writeToFile:filePath atomically: YES];
нет успеха, все еще получая нулевое значение для массива, я добавил ваш метод - (void) createEditableCopyOfIfNeeded, а затем вызвал его из представления DidLoad, поскольку [self createEditableCopyOfIfNeeded] после вызова этой функции я использовал ваш код для чтения plist файл, но получение нулевого значения –
Я столкнулся с этим вопросом один раз. Что вам может понадобиться, это сбросить симулятор. Что делает этот код, так это если файл уже там называется Template.plist, он не будет его переопределять. Поэтому, если файл уже существует, этот код не будет работать для вас, пока вы его не удалите. Это можно сделать, запустив симулятор и нажав меню iOS simulator и нажав кнопку сброса и настройки. Это очистит симулятор. Другие опции - использование NSLog (@ "% @", filePath); и просто следуйте по пути, пока не найдете файл и не удалите его. – Jaybit