Как правильно написать в плист? - PullRequest
0 голосов
/ 31 августа 2011

У меня проблемы с записью файла в список после того, как я прошел много уроков, проблем других людей и попробовал его для себя.Я могу прочитать список без проблем, но я не могу обновить его.Ниже приведены мои коды о том, как я записываю свои данные в список.Поправьте меня, если я допустил ошибку.

    NSString *path = [[NSBundle mainBundle] pathForResource:@"EventAddress" ofType:@"plist"]; 
    NSMutableDictionary *myDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
    NSArray* allmyData = [myDictionary  allValues];

    // creates and array to store only the event details
    NSMutableArray *data = [[NSMutableArray alloc] initWithArray:allmyData];
    [data addObject:[[NSMutableDictionary alloc] initWithObjectsAndKeys:tfAddress.text, @"Address", tvEvents.text, @"Events", nil]];
    [myDictionary setValue:data forKey:@"Whampo"];
    BOOL flag = [myDictionary writeToFile:path atomically:YES];
    if (flag){
        NSLog(@"write to plist success");
    }
    NSLog(@"%@", myDictionary);
    [myDictionary release];

Путь правильный, файл существует, мои значения в textView и textField находятся в массиве, но когда дело доходит до writeToFile, он не отражаетв файле, расположенном в каталоге документов.

РЕДАКТИРОВАТЬ 01:

Я нашел это в Интернете, очень похоже на предложение Некто.Но я думаю о том, как реализовать свой код с его помощью.Я думаю, что это довольно просто, но я не могу понять, как это сделать.

NSArray *paths= NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentDirectory = [paths objectAtIndex:0];

NSString *plistDirectory = [NSString stringWithFormat:@"%@/Enterprise",documentDirectory];

NSString *mPath = [plistDirectory stringByAppendingPathComponent:@"Downloads.plist"]; 

[mDownloadsArray writeToFile:mPath atomically:YES];

iphonesdk.blogspot взято с этого сайта.

РЕДАКТИРОВАТЬ 02:

Я использовал предложение Некто, и оно работало хорошо.Но мне любопытно, почему он возвращает DocumentsEventAddress.plist, а не EventAddress.plist.Мое предположение из-за NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSString *plistPath = [rootPath stringByAppendingString:@"EventAddress.plist"];

Где rootPath возвращает Document это верно?

Ответы [ 3 ]

1 голос
/ 31 августа 2011

Я пишу в файл таким образом:

NSString *errorDesc = nil;
NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *plistPath = [rootPath stringByAppendingString:TEMPLATES_PATH];
NSDictionary *dict = [NSDictionary dictionaryWithObject:templates forKey:@"templates"];
NSData *plistData = [NSPropertyListSerialization dataFromPropertyList:dict format:NSPropertyListXMLFormat_v1_0 errorDescription:&errorDesc];
if (plistData)
{
    [plistData writeToFile:plistPath atomically:YES];
}else
{
    NSLog(@"[Error] Application Did Enter Background {saving file error}: %@", errorDesc);
    [errorDesc release];
}

Обязательно сохраните файл в каталоге документов приложения.

0 голосов
/ 31 августа 2011

Вы не можете писать в файлы, которые находятся в вашем Bundle.Пакет приложений доступен только для чтения.

0 голосов
/ 31 августа 2011

Я не верю, что вы можете написать на ресурс.Только файлы в каталоге документов могут быть записаны в.

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