Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 创建新文件而不是复制文件_Iphone_Ios_Sqlite_Nsfilemanager - Fatal编程技术网

Iphone 创建新文件而不是复制文件

Iphone 创建新文件而不是复制文件,iphone,ios,sqlite,nsfilemanager,Iphone,Ios,Sqlite,Nsfilemanager,编辑:现在看起来它也不能与模拟器一起工作 更多的信息,如果我安装了一个存档版本,它确实工作,然后安装一个不工作,就在它上面,一切都很好。但当我删除存档版本并安装新版本时,一切都停止工作 我刚刚在iPhone上测试了我的应用程序,它运行得很好,当我将它归档并在手机上安装ipa时,数据库停止了工作。加载数据库时不会发生错误,正如我前面所说的,它只是在工作。我没有更改任何代码。它仍然在模拟器上工作,所以我知道它与数据库的复制有关。以下是相关代码: dbPath=[NSString stringWith

编辑:现在看起来它也不能与模拟器一起工作

更多的信息,如果我安装了一个存档版本,它确实工作,然后安装一个不工作,就在它上面,一切都很好。但当我删除存档版本并安装新版本时,一切都停止工作

我刚刚在iPhone上测试了我的应用程序,它运行得很好,当我将它归档并在手机上安装ipa时,数据库停止了工作。加载数据库时不会发生错误,正如我前面所说的,它只是在工作。我没有更改任何代码。它仍然在模拟器上工作,所以我知道它与数据库的复制有关。以下是相关代码:

dbPath=[NSString stringWithFormat:@"%@/Documents/database.sql", NSHomeDirectory()];
// Get the documents directory
NSFileManager *fmngr = [[NSFileManager alloc] init];
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"database.sql" ofType:nil];
NSError *error;
if(![[NSUserDefaults standardUserDefaults] boolForKey:@"didLaunchFirstTime"])
{
    [[NSUserDefaults standardUserDefaults] setBool:TRUE forKey:@"didLaunchFirstTime"];
    [fmngr removeItemAtPath:[NSString stringWithFormat:@"%@/Documents/database.sql", NSHomeDirectory()] error:&error];

    if(![fmngr copyItemAtPath:filePath toPath:[NSString stringWithFormat:@"%@/Documents/database.sql", NSHomeDirectory()] error:&error])
    {
        // handle the error
        NSLog(@"Error creating the database: %@", [error description]);

    }
}
我的查询是这样的,因为我正在使用FMDB查询数据库。它位于一个单独的方法中,该方法在用户按下搜索按钮时调用

FMResultSet *s = [db executeQueryWithFormat:@"SELECT Gurmukhi, ShabadID, FirstLetterStr FROM Shabad WHERE FirstLetterStr LIKE %@", searchString];

我还解压缩了ipa以检查数据库是否为空,它是否为空。我不知道发生了什么。

你不应该在你的应用程序中硬编码目录路径-苹果提供了获取路径的功能:

当您想在包中查找文件时,可以通过以下方式获得:

NSString*dbPathOld=[[NSBundle mainBundle]pathForResource:@“sql”类型的“数据库”

现在,您有了应用程序附带的sql文件的路径

如果要复制,请使用以下代码:

NSString*docDir=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)lastObject]; NSString*dbPathNew=[docDir stringByAppendingPathComponent:@“database.sql”]

其他意见:

1) 为什么不使用NSFileManager*fm=[NSFileManager defaultManager]


2) 使用您的标准默认值,您正在应用程序委托的初始化方法中注册它们?您在更新值之后正在同步它们(因此实际上“didLaunchFirstTime”是第二次设置的)?您可能需要添加一条日志消息,以便您可以确定。

您是否尝试过从设备中删除应用程序并重新安装?@SPVarma是的,甚至重新启动了我的应用程序phone@SPVarma事实上,有些有趣的事。这次我从模拟器中删除了这个应用程序,当它开始构建时,它做的事情和我的iPhone一样。新的ios6测试版对目录有什么改变吗?@Mukhi:你在哪里实现这段代码?我希望它位于-(NSPersistentStoreCoordinator*)persistentStoreCoordinator?@mvb no。。它只是在viewDidLoad方法中。它以前是工作的,有什么具体的原因需要它在那里吗?我不确定出了什么问题,但这些代码都不适合我。即使我尝试从数据库通常位于的只读位置读取数据库,在本例中是dbPathOld,它甚至不会给我无法打开的错误信息。那么您是否测试了文件是否确实存在?拼写是否正确(大写等)?您是否查看应用程序包以验证其是否存在(在ipa中?)。你可以使用文件管理器来测试文件的存在性、验证可读性等。很多人都做你想做的事情,这与你的应用程序有关。我知道文件在那里,并且它被复制了,但我不知道复制的文件中有什么。我唯一能想到的是,由于某种原因,复制的文件是空白的。是的,我意识到很多人都这么做,这对我来说很有用。但当我删除旧应用程序并安装新应用程序时,它不起作用,但当我在旧应用程序上安装新应用程序时,它工作正常。这意味着它与复制的版本有关,对吗?你有很多事情要做-如果你的应用程序第一次运行,你想复制该文件,并且你想核心数据在移动后(而不是之前)打开该文件。您是否记录了所有这些,以便知道操作顺序是正确的?与其在默认设置中使用标志,为什么不在documents文件夹中测试复制的文件?如果它在那里,你已经复制了它-如果它不在那里,你需要复制它。听起来似乎顺序不对,您确实复制了它,但核心数据试图过早地打开它。第二次启动时,文件被找到了,所以它看起来很神奇。由于某种原因,文件本来就存在,但该文件是空白的。因此,我需要检查它是否是第一次运行,如果是,我将删除该文件,复制正确的文件,并在所有操作结束时,打开数据库,以及该文件的路径。