как мы копируем plist в NSDefault в ios 5 - PullRequest
0 голосов
/ 25 ноября 2011

Как скопировать plist в nsdefault в iOS 5

Вот мой код:

NSError *error = nil;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *myPlistPath = [documentsDirectory stringByAppendingPathComponent: 
                         [NSString stringWithFormat: @"%@.plist", @"Bookmark"] ];


// If it's not there, copy it from the bundle
NSFileManager *fileManager = [NSFileManager defaultManager];
if ( ![fileManager fileExistsAtPath:myPlistPath] ) {
    NSString *pathToSettingsInBundle = [[NSBundle mainBundle] 
                                        pathForResource:@"Bookmark" ofType:@"plist"];

    [fileManager copyItemAtPath:pathToSettingsInBundle toPath:myPlistPath error:&error];
}
[myPlistPath retain];
[myPlistPath release];

Он работает в симуляторе правильно, но на устройстве он вылетает.

1 Ответ

1 голос
/ 27 ноября 2011

Во-первых, NSDefault - это не вещь, предоставленный код даже не использует NSUserDefaults, если это то, что вы имели в виду,

Теперь строки:

[myPlistPath retain];
[myPlistPath release];

полностью лишены, избавьтесь от них.

Теперь используйте здравый смысл при отладке.

  • cmd-shift-y откройте консоль, посмотрите, что там написано.
  • убедитесь, что Bookmark.plist существует в комплекте, проверьте, существует ли он в каталоге документов. Проверьте симулятор и устройство.
  • где происходит сбой при выполнении?
  • установить несколько журналов, например if (error) NSLog(@"Error:%@",error); Записать сгенерированные пути.
  • действительно if ( ![fileManager fileExistsAtPath:myPlistPath] ) оценивается как истинное или ложное. настроить другой журнал.
  • профилировать бег с помощью инструмента зомби.

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

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