создание файла plist - PullRequest
       1

создание файла plist

2 голосов
/ 16 февраля 2011

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

я сделал это, как написано в Руководстве по программированию списка свойств .

NSString *plistRootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *plistPath = [plistRootPath stringByAppendingPathComponent:@"list.plist"];

if (![[NSFileManager defaultManager] fileExistsAtPath:plistPath]) {

    plistPath = [[NSBundle mainBundle] pathForResource:@"list" ofType:@"plist"];

}

что я пропустил?

edit:

Я попробовал эту функцию в отдельном приложении, и она заработала.Поэтому я попробовал снова:

 NString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
 NSString *plistPath = [rootPath stringByAppendingPathComponent:@"list.plist"]; 

self.ListArray = [NSMutableArray arrayWithContentsOfFile:plistPath]; 
NSLog(@"preSave: %@", [ListArray count]);
NSLog(@"%@", plistPath);

и в журнале написано:

2011-02-16 16:54:56.832 ListApp[3496:207] .../Library/Application Support/iPhone Simulator/4.0.2/Applications/267F55E4-A46A-42E0-9E1C-EAF26846F75F/Documents/list.plist

но в каталоге нет файла!!

Ответы [ 2 ]

2 голосов
/ 31 марта 2012
NSString *DocPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

filePath=[DocPath stringByAppendingPathComponent:@"AlarmClock.plist"];

if (![[NSFileManager defaultManager] fileExistsAtPath:filePath]) 
{
    NSString *path=[[NSBundle mainBundle] pathForResource:@"AlarmClock" ofType:@"plist"];
    NSLog(@"file path: %@",filePath);
    NSDictionary *info=[NSDictionary dictionaryWithContentsOfFile:path];
    [info writeToFile:filePath atomically:YES];
}

// *** Попробуйте это ...

0 голосов
/ 17 февраля 2011

Я попробовал код на другом Mac, и там он работает. Это тот же проект.

Может кто-нибудь объяснить мне, почему plist создается на одном Mac, а не на другом?

на айфоне тоже никакой плист не написано?

Я полагаю, что в обоих случаях это объясняется тем, что массив, который я пишу в plist, пуст:

NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *plistPath = [rootPath stringByAppendingPathComponent:@"list.plist"];  
NSMutableArray *currentArray = [[NSMutableArray alloc] initWithContentsOfFile:plistPath];   
NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
            [selectet valueForKey:NAME], @"name",
            nil];   

NSLog(@" DIC. : %@", dictionary);
[currentArray addObject:[dictionary copy]];
NSLog(@" %@", currentArray);
[currentArray writeToFile:plistPath atomically:YES];
[currentArray release];

в словаре есть запись, но currentArray пусто .... И все же это работает на одном Mac. но не на другом а на айфоне.

Редактировать:

По какой-то причине это снова заработало.

Чтобы быть уверенным, что я удалил plist из папки документов и очистил все цели.

И теперь проблема, как и раньше, я могу записать список только тогда, когда пишу в него словарь, но тогда я могу сохранить только последний. И чтение списка не сработает.

Может кто-нибудь сказать мне, почему это происходит и как я могу это решить?

Редактировать 2:

Я обнаружил проблему: поскольку X-код не создает список, когда я записываю массив со словарем в список. Когда я записываю словарь в список, X-код создает список, но с корнем словаря поэтому я не могу записать массив в него, и я также не могу прочитать его в массиве .....

Я создал plist в папке Resources с корневым массивом и скопировал его, когда он не существует в папку документов, и теперь он работает .....

Разве это не удивительно, как такие простые вещи могут вызвать у вас такую ​​головную боль

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