Файл базы данных не копируется в каталог документов - PullRequest
0 голосов
/ 24 марта 2011

Когда я запускаю свое приложение, я не могу выполнять операции с БД. Когда я проверяю каталог документов симулятора iphone, он не содержит файл БД. Вот мой код

-(id)init
{
    [super init];

    databaseName=@"DSMDatabase.sqlite";

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

    NSString * documentDir=[documentsPaths objectAtIndex:0];

    databasePath=[documentDir stringByAppendingPathComponent:databaseName];

    return self;
}

-(void)checkAndCopyDB
{
    BOOL success;

    NSFileManager * fileManager=[NSFileManager defaultManager];

    success=[fileManager fileExistsAtPath:databasePath];

    if(success) return;

    NSString * databasepathfromapp=[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName];

    [fileManager copyItemAtPath:databasepathfromapp toPath:databasePath error:nil];

    [fileManager release];

}

1 Ответ

1 голос
/ 24 марта 2011

В -init вы присваиваете автоматически освобожденное значение для databasePath. В зависимости от того, как вызывается -checkAndCopyDB, велика вероятность того, что databasePath уже освобожден и переменная теперь указывает на что-то совершенно другое.

Вы могли бы справиться с этим, сохранив databasePath в init, но на самом деле нет причин хранить это в отдельном методе. Я бы переместил связанный с databasePath код в init в checkAndCopyDB, который бы работал так же хорошо и избежал проблем с автоматическим выпуском.

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