2016-02-15 22 views
1

我的項目中應該有一個代碼應該工作。簡單地說,我想如下排序創建日期的請求,獲取的成果:排序NSManagedObject數組

0  context =... 
1  let fetchRequest = NSFetchRequest(entityName: CoreDataValues.EntityName) 
2  do { 
3   let results = try context?.executeFetchRequest(fetchRequest) 
4   let sortDescriptor = NSSortDescriptor(key: CoreDataValues.CreationDateKey, ascending: true) 

5   if let sortedObjects = (results as? NSArray)?.sortedArrayUsingDescriptors([sortDescriptor]) as? [NSManagedObject] { 
6    searchTextObjects = sortedObjects 
7    tableView.reloadData() 
8   } 

9  } catch let error as NSError { 
10   print("Could not fetch \(error), \(error.userInfo)") 
11  } 

但在5日線我已經得到了警告:「從[AnyObject]投射到不相關類型的NSArray中總是失敗」。

回答

5

你的代碼有點複雜。

推薦的方法是通過排序描述符與沿讀取請求

context =... 
    let fetchRequest = NSFetchRequest(entityName: CoreDataValues.EntityName) 
    let sortDescriptor = NSSortDescriptor(key: CoreDataValues.CreationDateKey, ascending: true) 
    fetchRequest.sortDescriptors = [sortDescriptor] 
    do { 
     searchTextObjects = try context?.executeFetchRequest(fetchRequest) 
     tableView.reloadData() 

    } catch let error as NSError { 
     print("Could not fetch \(error), \(error.userInfo)") 
    } 

關於你的錯誤:儘快

executeFetchRequest回報[AnyObject]所以你可能投的類型爲正確的類型。

let results = try context.executeFetchRequest(fetchRequest) as! [NSManagedObject] 

我建議也使context非可選(如在最近的核心數據模板)

+0

能否請您鏈接對核心數據模板,使上下文非可選?在這段代碼中我有全局計算的屬性上下文:NSManagedObjectContext? –

+0

只需在啓用Core Data的Xcode 7中創建一個新項目。代碼將自動創建。 – vadian