iOS5 SDK,核心数据和创建新数据库。奇怪的问题

时间:2012-02-20 05:39:34

标签: xcode core-data ios5

我有一个奇怪的问题。我正在编写一个方法来处理带有核心数据的DB的创建,该核心数据首先检查db是否存在,然后才打开它(如果找到)或创建它(如果没有找到)。这是代码:

- (void) loadClubs
{
    NSLog(@"Checking for club database.");

    NSLog(@"file url: %@", self.clubDatabase.fileURL.path);


    if(![[NSFileManager defaultManager] fileExistsAtPath:[self.clubDatabase.fileURL path]])
    {
        NSLog(@"Creating club database.");

        //_clubDatabase saveToURL:<#(NSURL *)#> forSaveOperation:<#(UIDocumentSaveOperation)#> completionHandler:<#^(BOOL success)completionHandler#>

        [self.clubDatabase saveToURL: self.clubDatabase.fileURL forSaveOperation: UIDocumentSaveForCreating completionHandler:^(BOOL success){
            NSLog(@"test");
        }];
            //NSLog(@"Created new database.");
            //[self fetchClubData:self.clubDatabase];


    }
    else if (self.clubDatabase.documentState == UIDocumentStateClosed)
    {
        NSLog(@"Opening club database.");

        [self.clubDatabase openWithCompletionHandler:^(BOOL success)
        {
            NSLog(@"Opened club database.");
            [self fetchClubData:self.clubDatabase];
        }];
    }
    else if (self.clubDatabase.documentState == UIDocumentStateNormal)
    {
        [self fetchClubData:self.clubDatabase];
        NSLog(@"Club database is open. Proceeding as normal.");
    }
}

但我有一个非常奇怪的问题:当我调用[self.clubDatabase saveToURL:self.clubDatabase.fileURL forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success)时...完成处理程序不执行!!我完全不知道造成这种情况的原因。有什么想法吗?

我试过了:

  • 单步执行GDB
  • 调用_clubDatabase而不是提取 使用getter
  • 在Core Data中测试其他完成处理程序(其中 工作!)

我不知道造成这种情况的原因。有什么想法吗?

非常感谢!!

-Andrew

1 个答案:

答案 0 :(得分:0)

仅供参考,对于其他经历类似事情的人,我想我已经有了“啊哈!”时刻。似乎saveToURL异步运行,因此在此方法(顺序)之后调用的viewcontroller中的错误可能导致崩溃,从而防止完成处理程序被调用。我必须验证这一点,但这是唯一有意义的事情。