Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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
Cocoa 使用SQLite3 db的应用程序包括在雪豹上撞车_Cocoa_Sqlite - Fatal编程技术网

Cocoa 使用SQLite3 db的应用程序包括在雪豹上撞车

Cocoa 使用SQLite3 db的应用程序包括在雪豹上撞车,cocoa,sqlite,Cocoa,Sqlite,我已经在cocoa应用程序中包含了sqlite3db,它来自Leopard系统,并从中保存和检索了一些数据 问题是——虽然它在豹子身上运行良好,但它却在雪豹身上撞坏了 事故报告的部分内容如下: Process: RCS [84283] Path: /Volumes/RCS Project/~RCS APPLICATIONS/~RCS (Macintosh)/2011/26-January 2011/RCS.app/Contents/MacOS/RCS Ide

我已经在cocoa应用程序中包含了sqlite3db,它来自Leopard系统,并从中保存和检索了一些数据

问题是——虽然它在豹子身上运行良好,但它却在雪豹身上撞坏了

事故报告的部分内容如下:

Process:         RCS [84283]
Path:            /Volumes/RCS Project/~RCS APPLICATIONS/~RCS (Macintosh)/2011/26-January 2011/RCS.app/Contents/MacOS/RCS
Identifier:      com.tprf.RCS
Version:         2.0 build-0235 (2.0)
Code Type:       X86 (Native)
Parent Process:  launchd [173]

Date/Time:       2011-01-04 07:51:59.950 -0800
OS Version:      Mac OS X 10.6.5 (10H574)
Report Version:  6

Interval Since Last Report:          494528 sec
Crashes Since Last Report:           24
Per-App Interval Since Last Report:  25 sec
Per-App Crashes Since Last Report:   2
Anonymous UUID:                      A9023F03-79EA-4444-B7BF-25AB6DD07985

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000002, 0x0000000000000000
Crashed Thread:  0  Dispatch queue: com.apple.main-thread

Application Specific Information:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Failed to open database'
*** Call stack at first throw:
(
       0   CoreFoundation                      0x947e76ba __raiseError + 410
       1   libobjc.A.dylib                     0x9182e509 objc_exception_throw + 56
       2   CoreFoundation                      0x947e73e8 +[NSException raise:format:arguments:] + 136
       3   Foundation                          0x913e6bb3 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 116
       4   RCS                                 0x002af73c -[LocalDBController openDB] + 214
       5   RCS                                 0x00075157 -[SplashScreen awakeFromNib] + 32
       6   CoreFoundation                      0x9477f9b4 -[NSSet makeObjectsPerformSelector:] + 196
       7   AppKit                              0x94d2721c -[NSIBObjectData nibInstantiateWithOwner:topLevelObjects:] + 1566
       8   AppKit                              0x94d251f4 loadNib + 257
       9   AppKit                              0x94d245ed +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:] + 228
       10  AppKit                              0x94d244fe +[NSBundle(NSNibLoading) loadNibFile:externalNameTable:withZone:] + 158
       11  AppKit                              0x94d24449 +[NSBundle(NSNibLoading) loadNibNamed:owner:] + 383
       12  AppKit                              0x94d2124d NSApplicationMain + 434
       13  RCS                                 0x00002ce6 start + 54
)


Thread 0 Crashed:  Dispatch queue: com.apple.main-thread
0   com.apple.CoreFoundation            0x94832a37 ___TERMINATING_DUE_TO_UNCAUGHT_EXCEPTION___ + 7
1   libobjc.A.dylib                     0x9182e509 objc_exception_throw + 56
2   com.apple.CoreFoundation            0x947e73e8 +[NSException raise:format:arguments:] + 136
3   com.apple.Foundation                0x913e6bb3 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 116
4   com.tprf.RCS                        0x002af73c -[LocalDBController openDB] + 214
5   com.tprf.RCS                        0x00075157 -[SplashScreen awakeFromNib] + 32
6   com.apple.CoreFoundation            0x9477f9b4 -[NSSet makeObjectsPerformSelector:] + 196
7   com.apple.AppKit                    0x94d2721c -[NSIBObjectData nibInstantiateWithOwner:topLevelObjects:] + 1566
8   com.apple.AppKit                    0x94d251f4 loadNib + 257
9   com.apple.AppKit                    0x94d245ed +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:] + 228
10  com.apple.AppKit                    0x94d244fe +[NSBundle(NSNibLoading) loadNibFile:externalNameTable:withZone:] + 158
11  com.apple.AppKit                    0x94d24449 +[NSBundle(NSNibLoading) loadNibNamed:owner:] + 383
12  com.apple.AppKit                    0x94d2124d NSApplicationMain + 434
13  com.tprf.RCS                        0x00002ce6 start + 54
我在开始初始化和打开db时调用的方法如下:

-(void)dbInit{ // call in awake from NIB
    databaseName = [[NSString alloc] initWithString:@"test10.sql"];

    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDir = [documentPaths objectAtIndex:0];
    databasePath = [[NSString alloc] initWithString:[documentsDir stringByAppendingPathComponent:databaseName]];
    NSLog(@"databasePath - %@",databasePath);

    [self checkAndCreateDatabase];

}
-(void)checkAndCreateDatabase{
    BOOL success;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    success = [fileManager fileExistsAtPath:databasePath];
    NSLog(@"checkAndCreateDatabase, success - %d",success);
    if(success){
        [self openDB];
        return;
    }
    NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName];
    [fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];
    [fileManager release];

    // opening db 
    [self openDB];

}
- (void)openDB{
    if (sqlite3_open([databasePath UTF8String], &database) != SQLITE_OK) 
    {
        sqlite3_close(database);
        NSAssert(0, @"Failed to open database");
    }
    else{
        NSLog(@"db successfully opened");
    }
}
有人能为它提出一些解决方案吗?找到了解决方案。我把它作为答案贴了出来


现在有一些疑问:

  • 是否有任何其他文件夹,我应该在其中存储SQLite3数据库。。。除了文件。。我应该将其存储在~/Library/Application Support/或任何其他文件夹中吗

  • 我们是否可以通过代码检查存储db文件的文件夹是否具有适当的权限

  • 如果文件夹没有适当的权限,那么我们可以通过代码更改它吗

  • 有谁能澄清这些疑问或告诉我实现我的要求的标准方法吗

    谢谢


    Miraj

    我想到的唯一问题是,您无意中使用了一组糟糕的sqlite库。检查您的系统是否有它们的任何实例,甚至静态链接它们?如果不是这样,我看不出有什么不对。(我假设数据库在别处被声明并设置为nil。)

    为了解决上面报告的问题,我尝试记录从sqlite3\u open返回的结果。我得到了14个。我检查了目录权限,发现有些权限不是读写权限。当我将all改为read&write时,它开始正常工作:)

    在提供答案之前,我有一些问题。1) 您是在使用系统中包含的SQLite3,还是在添加最新版本的SQLite3?使用fmdb作为SQLite3的包装器怎么样?关于:1)我正在使用系统中包含的SQLite3。。没有添加SQLite3的最新版本。您能建议我如何检查系统是否包含错误的sqlite库集吗?打开终端并使用“find/-name libsqlite*”,这将显示存在哪些版本。您可能需要安装最初在其上开发数据库的相同版本。