2015-02-08 76 views
1

我想刪除一個與CoreData模型關聯的NSManagedObjects數組。我正在創建一個我的屬性分開的類的新實例,並嘗試刪除其中的每個項目。任何線索我做錯了什麼?爲什麼我的Swift for-in-loop沒有執行/迭代?

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { 

    if editingStyle == .Delete { 

     // THIS FOR IN LOOP WILL NOT EXECUTE... 
     for x in DrilledDownCategoryViewController().categoryItemsItems { 
      println("^^^") 
      managedObjectContext?.deleteObject(x as NSManagedObject) 
     } 

     // EVERYTHING ELSE WILL THOUGH... 
     println("asdfjkl;") 

     let logItemToDelete = categoryItems[indexPath.row] 

     managedObjectContext?.deleteObject(logItemToDelete) 

     self.fetchCategory() 

     tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic) 

     save() 

    } 

} 

回答

1

DrilledDownCategoryViewController是一類。 DrilledDownCategoryViewController()是它的構造者。 使用DrilledDownCategoryViewController()您可以創建視圖控制器的新實例,而不是訪問「正在運行」的實例。 當然,一個新的Object的相關數組(或曾經)將是零或它在其構造函數中設置的內容。

如果您正在使用的Objective-C,這是你做了什麼:

[[[DrilledDownCategoryViewController alloc] init| categoryItemsItems] 

一個OBJ-C forin循環woult不重複單一的時間太長。

+0

我習慣於編寫JavaScript哈哈。你能指出我的寫作方向,以正確訪問「跑步」類的屬性值嗎? – 2015-02-08 08:05:55

+0

不是。顯然你的代碼sniplet是來自某個表視圖控制器。這是非常DrilledDownCategoryViewController或它們是如何相關的?如果是那個,那麼使用'self.categoryItemsItems'來訪問它,或者只使用'categoryItemsItems'。 – 2015-02-08 08:12:51

+0

對於任何人想知道爲什麼我遇到這個問題,請看下面的答案。感謝Hermann的幫助! – 2015-02-08 10:04:26

0

for-in-loop不會執行空數組。

只是這樣做,所以你不會遇到另一個類的空的提取結果數組:如果你試圖訪問一個CoreData項的提取結果數組;不要依賴訪問另一個類的數組。只需獲取特定的謂詞過濾項並將它們注入到新數組中。您將能夠從那裏更改或刪除它們...

相關問題