V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
kukat
V2EX  ›  iDev

App版本升级,Documents里的sqlite会被覆盖/无视?

  •  
  •   kukat · 2010-08-10 19:41:01 +08:00 · 5780 次点击
    这是一个创建于 5220 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Resource里有个myapp.sqlite
    执行程序的时候检查Documents里有没有myapp.sqlite
    没有的话复制Resource的myapp.sqlite到Documents下的myapp.sqlite
    程序使用Documents下的myapp.sqlite


    这样是没问题,但是程序升级的时候是怎么样一个操作过程?
    我试过删除掉app,什么都没改,然后重新编译运行,/Users/Alex/Library/Application Support/iPhone Simulator/4.0.1/Applications/%{color:red} 7394719E-D792-40A1-9F15-AA39BEF316BE%/Documents/myapp.sqlite 红色部分会变,这样就拿不到正确的Documents路径了哇


    如果程序升级后不就丢失了以前的数据了?
    召唤解释帝
    8 条回复    1970-01-01 08:00:00 +08:00
    kukat
        1
    kukat  
    OP
       2010-08-10 19:43:48 +08:00
    1. 编辑器原来不是textile阿……
    2. 怎么编辑帖子?
    3. 来人帮忙解答阿
    Kai
        2
    Kai  
    MOD
       2010-08-10 19:56:01 +08:00
    程序升级的时候,App 自己产生的 SQL 文件不会被覆盖。

    一般在这种时候会在 Bundle 里面存一个预设的 SQL,用在程序初始化的时候自动拷贝 /Documents 下。

    换到机器上面试试看?
    kukat
        3
    kukat  
    OP
       2010-08-10 20:04:52 +08:00
    @Kai
    我说的Resource就是指的Bundle

    我在真机上试过了
    本来是
    /var/mobile/Applications/AEF8A0A5-0B81-4092-BAF5-C70FFE6A33A0/Documents/myapp.sqlite
    删除后在编译运行
    /var/mobile/Applications/E244258C-25C5-4FD2-9D70-A31C9593DFE1/Documents/myapp.sqlite

    App ID 变鸟,之前的数据也木有鸟……
    Kai
        4
    Kai  
    MOD
       2010-08-10 20:08:51 +08:00
    程序初始化时候的检查是否存在这个文件以及之后的覆盖这方面设置没有出错?

    另外,Clear All Targets 先 ?
    Livid
        5
    Livid  
    MOD
       2010-08-10 20:14:41 +08:00
    你用来获取 Documents path 的那几句程序是?
    Livid
        6
    Livid  
    MOD
       2010-08-10 20:18:10 +08:00
    我的获取方法:

    NSArray * searched = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString * documentPath = [searched objectAtIndex:0];

    这样在升级的时候是确实可以找到之前的文件的。
    kukat
        7
    kukat  
    OP
       2010-08-11 11:25:34 +08:00
    @Livid
    我的代碼是
    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDir = [documentPaths objectAtIndex:0];
    NSString * databasePath = [documentsDir stringByAppendingPathComponent: DBNAME];

    你有试过从模拟器或者真机删除App,然后再编译运行吗?
    App ID是一定会变的。
    如果这个方法可用,是不是说明升级的时候不是 删除旧的->安装新的
    huacnlee
        8
    huacnlee  
       2010-08-11 18:55:21 +08:00 via Android
    我根本没有 SqlLite文件在项目里面,而是在程序运行的时候产生,如果以前没产生的话

    这样就不用担心升级被覆盖的问题了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2585 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 00:31 · PVG 08:31 · LAX 16:31 · JFK 19:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.