2015-11-06 97 views
0

嗨我试图修复SugarRecord使用CoreData和iCloud的好方法。类型'[NSManagedObject]'的值永远不能为零,不允许比较

我得到上面用下面的方法这个错误:

public func find(finder: SugarRecordFinder) -> SugarRecordResults 
    { 

     let fetchRequest: NSFetchRequest = SugarRecordCDContext.fetchRequest(fromFinder: finder) 



     var objects = [NSManagedObject]() 
     do{ 
       objects = try self.contextCD.executeFetchRequest(fetchRequest) as! [NSManagedObject] 

     } 
     catch 
     { 

     } 
     if objects == nil { 
      objects = [NSManagedObject]() 
     } 

     return SugarRecordResults(results: SugarRecordArray(array: objects), finder: finder) 
    } 

错误是上线 - if objects == nil {

虽然搜索网后,我无法找到一个方法来解决这个问题。谢谢,如果你能帮忙。

+0

记住,你可以检查零只自选,你的情况Objects是不可选的,这就是为什么你得到这个错误。相反,检查对象是否包含任何项目。 – Shripada

回答

1

executeFetchRequest总是返回一个数组。如果什么都找不到,这个数组就是空的。

只要删除

if objects == nil { 
    objects = [NSManagedObject]() 
} 

一个更好的语法是

public func find(finder: SugarRecordFinder) -> SugarRecordResults 
{ 

    let fetchRequest: NSFetchRequest = SugarRecordCDContext.fetchRequest(fromFinder: finder) 
    do { 
    let objects = try self.contextCD.executeFetchRequest(fetchRequest) as! [NSManagedObject] 
    return SugarRecordResults(results: SugarRecordArray(array: objects), finder: finder) 
    } 
    catch let error as NSError { 
    // do error handling 
    return SugarRecordResults() 
    } 
} 
+0

嗨,太棒了。尽管我在返回SugarRecordResults()时遇到错误 –

相关问题