Вопрос по database, iphone – Сбой приложения при попытке создания базы данных

12

Я создал базу данных sql, используя «Браузер баз данных SQLite», перетащил ее в свой проект Xcode и собрал приложение. Он отлично работает на симуляторе, но вылетает на iPhone с этой ошибкой:

<code>*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', 
 reason: 'Failed to create writable database file with message 'The operation could‚ 
not be completed. (Cocoa error 260.)'.'   
</code>

Вот мой код:

<code>- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Creates a writable copy of the bundled default database in the application Documents directory:
    NSLog(@"AppDelegate...Looking for embedded Database file...");
    BOOL success;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSError *error;
    // Grab the path to the Documents folder:
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"users.sql"];

    success = [fileManager fileExistsAtPath:writableDBPath];
    if (success) {
        NSLog(@"Database File Exists in Documents folder!");
        NSLog(@"Its path is: %@", writableDBPath);
        return YES;
    }
    else {
    // But if the writable database does not exist, copy the default to the appropriate location.
    NSLog(@"!!NO Database File Exists in Documents folder!");
    NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"users.sql"];
    success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];
    if (!success) {
        NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
    }
    else 
        NSLog(@"WROTE THE DATABASE FILE!!!");
}

return YES;
}
</code>

Снова, это работает на Симуляторе, но не на iPhone. (Это не может иметь никакого отношения к файлу с расширением «.sql», а не к расширению «.sqlite», не так ли? Потому что это расширения, которые «Браузер баз данных SQLite» дает создаваемым им файлам). .)

Насколько я знаю, ошибка 260 Какао - это NSFileReadNoSuchFileError, так что это может быть из-за расширения. Vin
хорошо, я просто изменил имя файла, чтобы оно заканчивалось на «.sqlite» - и снова импортировал файл в Xcode, и изменил на код, чтобы соответствовать новому имени файла - его все еще происходит сбой - по той же причине. Так что это не так .... sirab333
try, чтобы запустить код учебника, который вы использовали на устройстве, и посмотреть, работает ли он. Если это так, возможно, проблема с самим файлом db. Vin
не работает. Смотри, приложение отлично работает на симуляторе, так почему же оно не работает на устройстве? Что-то не так с моим кодом? Я предполагаю, что вы посмотрели на мой код и не нашли в нем ошибок - так ли это? Кроме того, если была проблема с самим файлом базы данных - как я мог это выяснить? Его открытие просто прекрасно в программе базы данных, так что не поврежден или что-нибудь. Есть ли какие-нибудь тесты, которые я мог бы выполнить? Есть ли еще какие-то предложения, которые приходят на ум? Что сумасшедшего, так это то, что все это работало очень хорошо - пока я не обновился до iOS 5.1 - могчт да будет? sirab333

Ваш Ответ

3   ответа
0

проверьте эту строку:

NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"users.sql"]

Проверьте fileName в вашем комплекте и в коде - ошибка также связана с разными именами файлов.

28

чтобы убедиться, что «Целевое членство» файла sql установлено правильно, так что проект «видит» его:

1) нажмите на файл sql в левой панели Xcode

2) открыть / показать инспектор файлов (правая панель)

3) В разделе «Целевое членство» убедитесь, что «чек» «проверен»

вот и все

спасибо, что приятно !!! iDhaval
@ sirab333 ты должен принять это как ответ. Naeem
@ sirab333: Спасибо .. у меня это работает !!!! Meet Doshi
2

Это решение решает мою проблему, надеюсь, оно поможет вам.

Похожие вопросы