Функция для записи данных в plist в Objective-c - PullRequest
1 голос
/ 10 октября 2011

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

CommonClass.m

- (NSString *)getDirectoryPath
{
    NSArray *pathList = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *path = [pathList objectAtIndex:0];
    return path;
}

- (void)savePlist:(NSString *)fileName WithArray:(NSArray *)fileArr
{
    NSString *path = [[self getDirectoryPath] stringByAppendingPathComponent:fileName];
    [fileArr writeToFile:path atomically:YES];
}

Пока я запускаю код, как показано ниже, plist не создается.

ABCAppDelegate.m

...
[cc savePlist:@"example.plist" WithArray:[NSArray new]];

Файл example.plist не был создан, есть ли ошибки в моем коде?

Спасибо

ОБНОВЛЕНИЕ:

Если я использую код, указанный ниже, файл xxx.plist был успешно создан.

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *plistFile = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"abc.plist"];
NSMutableDictionary *plist = [[NSMutableDictionary alloc] initWithContentsOfFile:plistFile];

if (!plist) {
    plist = [NSMutableDictionary new];
    [plist writeToFile:plistFile atomically:YES];
    NSLog(@"write plist");
}

Ссылка: ссылка

ОБНОВЛЕНИЕ 2:

Я меняю код, как показано ниже:

NSLog(@"code");
[cc savePlist:@"example.plist" WithArray:[NSArray new]];
NSLog(@"code");

- (void)savePlist:(NSString *)fileName WithArray:(NSArray *)fileArr
{
    NSLog(@"fileName = %@, fileArr = %@", fileName, fileArr);
    NSString *path = [[self getDirectoryPath] stringByAppendingPathComponent:fileName];
    NSLog(@"path = %@", path);
    [fileArr writeToFile:path atomically:YES];
}

Он просто распечатывает:

2011-10-10 14:24:00.560 ABC[3390:207] code
2011-10-10 14:24:00.561 ABC[3390:207] code

Нет сообщений fileName = и fileArr =, такжепуть = распечатать в журнале, поэтому код внутри savePlist не был выполнен?

1 Ответ

0 голосов
/ 10 октября 2011

Похоже, что ваш объект общего класса не создан, и вы отправляете все эти сообщения на nil. Попробуйте войти в cc в коде делегата приложения, откуда вы вызываете этот метод.

Вам нужно создать экземпляр вашего общего класса, что-то вроде

cc = [[CommonClass alloc] init];

(может варьироваться в зависимости от настроек).

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