将sqlite数据库与app和stringByAppendingPathComponent绑定错误

将sqlite数据库与app和stringByAppendingPathComponent绑定错误,sqlite,compiler-errors,xcode4.2,bundle,Sqlite,Compiler Errors,Xcode4.2,Bundle,可能还有很多其他问题我甚至不知道要问,因为我是应用程序编程新手 我最初从应用程序中创建数据库,将其复制到我的工作文件夹(可能不是它最终应该驻留的地方),然后从文本文件中附加我的记录(大约1000条记录) 首先想到的两个问题是: -数据库应该在哪个文件夹中? -它是如何与应用程序一起部署的 我发现在persistentStoreCoordinator函数中使用以下行的示例很少: NSString *storePath = [[self applicationDocumentsDirectory]

可能还有很多其他问题我甚至不知道要问,因为我是应用程序编程新手

我最初从应用程序中创建数据库,将其复制到我的工作文件夹(可能不是它最终应该驻留的地方),然后从文本文件中附加我的记录(大约1000条记录)

首先想到的两个问题是: -数据库应该在哪个文件夹中? -它是如何与应用程序一起部署的

我发现在persistentStoreCoordinator函数中使用以下行的示例很少:

NSString *storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"myDatabase.sqlite"];
NSURL *storeUrl = [NSURL fileURLWithPath:storePath];
但第一行给出了预编译错误:“例如,接收方类型'NSURL'没有使用选择器'stringByAppendingPathComponent:'声明方法。为什么它对我不起作用

这实际上是将我的数据库与应用程序的其余部分捆绑在一起的最佳方式吗


谢谢!

最简单的解决方案是使用NSUrl而不是NSString。因此user@trapper已经在下面的链接中提供了一个解决方案

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

// If the database doesn't exist copy in the default one
if (![storeURL checkResourceIsReachableAndReturnError:NULL])
{
    NSURL *defaultStoreURL = [[NSBundle mainBundle] URLForResource:@"Database" withExtension:@"sqlite"];

    if ([defaultStoreURL checkResourceIsReachableAndReturnError:NULL])
    {
        NSFileManager *fileManager = [NSFileManager defaultManager];
        [fileManager copyItemAtURL:defaultStoreURL toURL:storeURL error:NULL];
    }
}