我是Xcode和ios的新手。我正在使用Xcode 7.3版本和swift2.2
我已从我的项目中删除了一个已填充的SQlite Db。后来,我在Xcode中使用Add file菜单添加了同名的SQLite Db,只修改了该字段的内容。例如,fieldname:addr,内容:123,5th ave,现在同一个域名:addr,内容:12,Broadway
添加修改后的内容SQLite DB后,代码STILL使用的是123,5th ave的旧内容!
let querySQL = "select Sid, location, Addr from tblPlaces where Sid =" + myId
let result: FMResultSet? = MyDB.executeQuery(querySQL, withArgumentsinArray:nil)
if result?.next() == true {
let strAddr = results!stringForColumn("Addr")
}else {
}
I have created a class to handle the creation of SQLite DB in AppDelegate:
Util.copyFile("SqliteDB filename")
here the code:
class func copyFile(fileName: NSString) {
var dbPath: NSString = getPath(fileName)
var fileManager = NSFileManager.defaultManager()
if !fileManager.fileExistsAtPath(dbPath) {
let documentsURL = NSBundle.mainBundle().resourceURL
let fromPath = documentsURL!.URLByAppendingPathComponent(filename as string)
var error : NSError?
do {
try filemanager.CopyItemAtPath(fromPath.path!, toPath: dbPath)
}catch let error1 as NSError {
error = error1
}
}
// GetPath of the SQLite file
class func getPath(filename : String) -> string {
let documentDirectory = try! NSFileManager.defaultManager().URLForDirectory(.DocumentDirectory,inDomain:
UserDomainMask, appropriateURLURL:nil, create: true)
return documentDirectory.URLbyAppendingPathComponent(filename).path!
}
发生了什么事?怎么做正确的方法?
如果我删除SQlite Db文件说MyDB.sqlite,后来我添加了同名Db文件并修改了内容,我应该获取新内容。但事实并非如此。
答案 0 :(得分:0)
您将文件放在应用程序包中,即随应用程序一起分发。该文件是只读的。要更新文件(包括方案重组),您需要将文件复制到文档文件夹,然后在那里进行更新。否则,您的更新将失败,为您留下与以前相同的文件。
我认为这就是正在发生的事情。
对于分发,还必须标记任何此类文件,不要备份到icloud或拒绝该应用程序。
我使用以下方法(抱歉,obj c)将文件从包中复制到文档目录(抱歉,这段代码很邋but,但它可能传达了基本的想法)。
+ (void)copyBundleFileToStoresDirectory:(NSString *)filename
{
NSError *error;
NSURL *fileURL = [NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource:filename ofType:nil]];
NSURL *pathURL = [SVOFileSystemMethods documentsSubdirectory:@"Stores" skipBackup:YES];
if (fileURL)
{
if([[NSFileManager defaultManager] copyItemAtURL:fileURL toURL:pathURL error:&error])
{
// NSLog(@"File successfully copied");
}
else
{
[[[UIAlertView alloc]initWithTitle:NSLocalizedString(@"error", nil) message: NSLocalizedString(@"Failed to copy database from bundle.", nil)
delegate:nil cancelButtonTitle:NSLocalizedString(@"OK", nil) otherButtonTitles:nil] show];
NSLog(@"Error description-%@ \n", [error localizedDescription]);
NSLog(@"Error reason-%@", [error localizedFailureReason]);
}
}
}
// // flags URL to exclude from backup //
+ (BOOL) addSkipBackupAttributeToItemAtURL:(NSURL *)URL {
NSError *error = nil;
BOOL success = [URL setResourceValue: [NSNumber numberWithBool: YES]
forKey: NSURLIsExcludedFromBackupKey error: &error];
if(!success)
{
NSLog(@"Error excluding %@ from backup %@", [URL lastPathComponent], error);
}
return success; }