2013-01-03 60 views
0

對,所以我的UITableView按字母順序加載並放入所有單元格。然後從服務器下載信息並完成計算,一旦所有事情完成,TableView將重新加載。目前這是一個非常簡單的過程,因爲一旦信息從服務器下載,單元格甚至不移動,它們仍然按照字母順序排列。除了一半的信息被填入並且根據計算進行小的改變之外,沒有什麼會發生。我想知道是否有一種簡單的方法將細胞放入部分,具體取決於下載完成後的計算結果?我確實有創建4個數組的想法(一次只有4個部分),並且一旦isLoading被設置爲no,將TableView的數據源更改爲具有部分,但是,這聽起來有點...如果。我知道這是一個與編碼問題相反的理論問題,但是在我去弄亂我的代碼之前,確定是一種愚蠢無效的做事方式,有沒有簡單的方法將UITableViewCells「分配」 ?在將TableView加載後,將UITableView中的單元格分爲多個部分

我與我做這件事的方式主要問題是,如果用戶刪除單元格,刪除在覈心數據相應的條目將是一個有點棘手而且容易出錯。這導致了我另一個想法。如果我爲Core Data實體添加了一個額外的屬性,該怎麼辦?一旦計算完成,該屬性將被分配並保存。問題在於沒有現有的數據庫可以工作。必須有一個完美的方式來實現這一點。

感謝您的幫助。如果你需要我發表任何代碼,只是這麼說,我會。

+0

您能澄清與在覈心數據中添加屬性相關的問題,並且之後出現數據庫問題嗎? – Bill

+0

@Bill好吧,我的應用程序已經分發了一些。添加其他屬性會導致與使用該應用程序的任何人不兼容,這意味着他們必須重新安裝應用程序,我是否正確? – Mackey18

+0

從這個意義上說,是的。理想情況下,您可以將您的API版本升級到您的數據庫,以便更新不會導致問題。 – Bill

回答

1

如果實施與部分數據源的方法,你應該罰款。

例如:

  • numberOfSectionsInTableView
  • sectionIndexTitlesForTableView。

任何時候重新加載表數據(例如,[self.tableView reloadData]),這些方法將被調用,數據將被放置到它們的部分。

請記住,單元格僅僅是您的模型的可視化表示,在這種情況下,這是您獲取的數據。單元格不分配給部分;它們是簡單創建的,但是您可以爲模型指定(通過表視圖數據源和委託方法)。

關於條目刪除,同時利用核心數據,我建議考慮看看NSFetchedResultsController。後者將監視對錶格數據的任何更改,並在更新時向其委託人(表格視圖控制器)發送消息。

例如,缺失將與像正常表視圖代表的呼叫(:didEndEditingRowAtIndexPath即,經由的tableView)啓動。在後者中,您將從核心數據中刪除條目(例如[self.myDatabase.managedObjectContext deleteObject:entity])。假設您啓動了具有相同託管對象上下文的NSFetchedResultsController,刪除將自動反映回您的用戶。

如果您使用的是遠程數據庫,但是,你也必須進行保存(但是你已經實施了),以確保DB過更新。

還要注意的是,如果你使用一個NSFetchedResultsController,你並不需要實現部分數據源的方法,因爲NSFetchedResultsController可以處理你。只需定義數據模型中的鍵路徑,它將在初始化NSFetchedResultsController時返回節名。

+0

謝謝Bill!我目前使用NSFetchedResultsController,它是否考慮到部分?即部分2位置1中的東西實際上可能是從核心數據加載的第一個條目。如果刪除會這仍然刪除正確的條目,或NSFetchedResultsController愚蠢的方法? – Mackey18

+1

是的,NSFetchedResultsController接受一個可選的鍵路徑來返回節名稱。看看這個[參考](http://developer.apple.com/library/ios/#documentation/CoreData/Reference/NSFetchedResultsController_Class/Reference/Reference.html)。具體來說,initWithFetchRequest:managedObjectContext:sectionNameKeyPath:cacheName。 – Bill

+0

再次感謝比爾。現在再考慮一下。我已經在使用NSFRC,但是從我所知道的情況來看,沒有辦法使用NSFRC來實現我想要的功能,而不會爲我的實體創建另一個屬性。我對嗎?在這種情況下,我必須通過TableView委託來完成,這意味着從Core Data中刪除會更棘手。如果我有這個錯誤,請說出來。我對所有這些東西都很陌生! – Mackey18

相關問題