无法处理 executeFetchRequest 错误

Posted

技术标签:

【中文标题】无法处理 executeFetchRequest 错误【英文标题】:Not able to handle executeFetchRequest error 【发布时间】:2012-03-01 19:25:18 【问题描述】:

我的获取请求工作正常,我获取的对象没有任何问题。我想要做的是在实体不存在的情况下处理错误。问题是,我无法处理该错误,因为当我调用 executeFetechRequest: error: without any warnings 时应用程序崩溃。

我的抓取看起来像:

NSManagedObjectContext *context = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];

NSFetchRequest *request = [[NSFetchRequest alloc] init];
request.entity = [NSEntityDescription entityForName:@"Info" inManagedObjectContext:context];
request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"infoID" ascending:YES]];
[request setReturnsObjectsAsFaults:NO];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"infoID like %@",[a substringFromIndex:13]];
request.predicate = predicate;
request.fetchBatchSize = 1;

NSError *error = nil;

NSArray *results = [context executeFetchRequest:request error:&error];

if (error == nil) 
    ...

else 
    //handle error

正如我所说,只要实体存在就没有问题,但如果它不存在,我想处理错误。任何的想法?干杯

【问题讨论】:

嗯.. 你永远不应该对不存在的实体类型进行获取请求。在什么情况下您需要这样做? 其实是个好问题:/ ...我以为我需要检查它以防不同版本的应用程序之间同步,但实际上我以不同的方式捕捉到这种情况。谢谢哈哈...但是要 100% 确定,为什么不检查实体是否存在,以免应用崩溃? 再一次,这不应该发生,你应该只引用你知道存在的实体。如果您更新应用程序以删除此实体,那么您应该更改您的代码以不再使用它。你应该设置你的核心数据模型来做版本控制,这样你就可以轻松地迁移你的数据库。 【参考方案1】:

你可以询问模型是否存在这样的实体:

    NSArray *entities = managedObjectModel.entities;
    BOOL canExecute=NO;
    for(NSEntityDescription *ed in entities) 
       // check if entity name is equal to the one you are looking for
       if(found) 
          canExecute=YES;
          break;
       
    

   if(canExecute) 
     // execute your request and all the rest...
    else 
     NSLog(@"Entity description not found");
   

如果不存在,则不执行 fetch reuest

【讨论】:

以上是关于无法处理 executeFetchRequest 错误的主要内容,如果未能解决你的问题,请参考以下文章

for循环随机挂在executeFetchRequest:错误:

NSInvalidArgumentException',原因:'executeFetchRequest:错误:

executefetchrequest 导致崩溃

Swift 中的 executeFetchRequest 致命错误

executeFetchRequest 不适用于 propertiesToFetch

NSPredicate,executeFetchRequest 崩溃