Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.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
Objective c 在Iphone中创建数据库时出现Exc_Bad_访问异常_Objective C_Database_Exception - Fatal编程技术网

Objective c 在Iphone中创建数据库时出现Exc_Bad_访问异常

Objective c 在Iphone中创建数据库时出现Exc_Bad_访问异常,objective-c,database,exception,Objective C,Database,Exception,我在调用以下方法后收到此异常。而且它只有在应用程序首次加载时才会出现。当我再次打开应用程序时,它工作正常。有人能帮忙吗 -(void) createAndCheckDatabase { BOOL success; self.databaseName = @"database.db"; NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,

我在调用以下方法后收到此异常。而且它只有在应用程序首次加载时才会出现。当我再次打开应用程序时,它工作正常。有人能帮忙吗

-(void) createAndCheckDatabase
{
  BOOL success; 

  self.databaseName = @"database.db";
  NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  NSString *documentDir = [documentPaths objectAtIndex:0];
  self.databasePath = [[documentDir stringByAppendingPathComponent:self.databaseName]retain];

  NSFileManager *fileManager = [NSFileManager defaultManager];

  success = [fileManager fileExistsAtPath:self.databasePath];

  if(success) return; 

  NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:self.databaseName];

  NSError *err;
  [fileManager copyItemAtPath:databasePathFromApp toPath:self.databasePath error:nil];
  if (err) {
//      DebugLog(@"%@", [err description]);
  }

}

如果(错误)。。。将崩溃,因为err未初始化!而且您不会在fileManager copyItemAtPath中使用它:

如果(错误)。。。将崩溃,因为err未初始化!在fileManager copyItemAtPath中不使用它:

EXEC\u BAD\u ACCESS几乎总是意味着处理指针或C数组的错误,或者对象已过发布

好消息是,调试器中应该有一个堆栈跟踪(如果在Xcode中运行),或者一个崩溃日志,可以准确地显示出出错的地方。(如何创建和崩溃日志)

使用Zombies工具“评测”您的代码是获取有关过度发布的更多信息的最佳方式


如果你可以发布一个符号化的stacktrace,我们可以尝试给你一个更好的诊断。

EXEC\u BAD\u ACCESS几乎总是意味着处理指针或C数组的错误,或者对象被释放了

好消息是,调试器中应该有一个堆栈跟踪(如果在Xcode中运行),或者一个崩溃日志,可以准确地显示出出错的地方。(如何创建和崩溃日志)

使用Zombies工具“评测”您的代码是获取有关过度发布的更多信息的最佳方式


如果您可以发布符号化stacktrace,我们可以尝试为您提供更好的诊断。

您可以粘贴/显示属性:self.databaseName吗?它是什么?retain?@JonasSchnelli是的,它的retain类似于内存泄漏:
self.databasePath=[[documentDir stringByAppendingPathComponent:self.databaseName]retain]删除
保留
。但这场崩溃不应该发生在那里。您是否使用调试器逐步完成了该方法?它在哪里崩溃?即使启用了NSZombie,也没有崩溃日志。另外,它在方法调用完成后崩溃。您可以粘贴/显示属性:self.databaseName吗?它是什么?retain?@JonasSchnelli是的,它的retain类似于内存泄漏:
self.databasePath=[[documentDir stringByAppendingPathComponent:self.databaseName]retain]删除
保留
。但这场崩溃不应该发生在那里。您是否使用调试器逐步完成了该方法?它在哪里崩溃?即使启用了NSZombie,也没有崩溃日志。此外,它在方法调用完成后崩溃。它未初始化意味着未设置为nil?如果使用ARC,错误将初始化为nil。否则它是“未定义的”,并且可能是一个垃圾值。更糟糕的是,在调试版本中它可能为0,并且在模拟器和设备中运行时可能是不同的值。它未初始化意味着未设置为nil?如果使用ARC,错误将初始化为nil。否则它是“未定义的”,并且可能是一个垃圾值。更糟糕的是,在调试构建中它可能是0,在模拟器和设备中运行时可能是不同的值。