0

也许问题的标题不是很不言自明,但我不知道如何总结。

我正在完成一个基本上是数据库的应用程序。我将在应用程序中发送一个数据库。一切正常,但现在我遇到了问题。安装应用程序时,需要在设备上创建数据库。因此,我将 DB 拖到了我的 Xcode 项目中的“Supporting Files”文件夹中(顺便说一下,仍然是 Xcode 4.1)。我转到 AppDelegate.m 文件并查找 (NSPersistentStoreCoordinator *)persistentStoreCoordinator{} 方法。

我替换了这一行:

NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Database.sqlite"];

对于此代码:

    NSString *storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"Database.sqlite"];
NSLog(@"%@", storePath);

NSURL *storeURL = [NSURL fileURLWithPath:storePath];

    // Put down default db if it doesn't already exist
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:storePath]) {
    NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"Database" ofType:@"sqlite"];
    if (defaultStorePath) {
        [fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL];
    }
}

我是从Ray Wenderlich 的教程中得到的

问题是编译器在线上给了我一个警告

NSString *storePath = [[self applicationDocumentsDirectory] ​​stringByAppendingPathComponent:@"Database.sqlite"];

这告诉我“NSURL 可能不会响应'stringByAppendingPathComponent',实际上,应用程序因此而崩溃。有趣的是,教程中的示例没有给出任何警告。

有人可以帮我解决我缺少的东西吗?

提前致谢!

4

1 回答 1

2

你确定 [self applicationDocumentsDirectory] ​​返回一个 NSString 吗?如果没有,试试这个

- (NSString *)applicationDocumentsDirectoryString {

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
    return basePath;
}

并将 [self applicationDocumentsDirectory] ​​更改为 [self applicationDocumentsDirectoryString]

于 2011-11-15T21:51:50.083 回答