這裏就是你要做的:
- 有核心數據的網絡連接更新對象。
- 在UITableView或Controller周圍的某處設置NSFetchedResultsController以查詢該類型的對象,例如,
article
對象上的images
集合。
- 將UiTableView數據源綁定到NSFetchedResultsController - 即表中的部分和行來自結果。
此時,表格視圖應該在滾動時成功顯示任何舊/當前項目。現在,...
- 當您的下載完成(可能是與例如文章相關的圖像)時,以某種方式更新CoreData中的對象 - 例如,只需將
image
插入到名爲images
的articles
集合中 - 結果控制器將根據您設置的初始謂詞「查看」。如果新對象(article,image,whatever)的indexPath當前可在tableView中查看,那麼tableView和results控制器會將它散列出來。
實際上你應該在這一點上完成,新的圖像可能會出現。結果控制器是KVO爲您觀察。你需要採取行動與結果控制器得到的變化,但有很多的例子,如this(和方法之間有很多差異)。如果沒有,你可能需要做一些無害的事情 - 例如當新文章出現時滾動到頂部;避免打電話reloadData
,除非你絕對必須。
更新
如果你只是想執行NSURLConnection的同步或異步操作,那麼所有你需要做的就是設置使用+ (NSURLConnection *)connectionWithRequest:(NSURLRequest *)request delegate:(id <NSURLConnectionDelegate>)delegate
的NSURLConnection的(或相關的初始化)和- (void)start
代替+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error
。第一種方法異步加載數據,而後者是同步的。
但是,既然你提到了connectionDidFinishLoading
,你似乎是異步設置連接,不是嗎?
謝謝你的演練,但是,這仍然不是直接或間接幫助我的問題:是不是有辦法代替同步使用NSURLConnection? – frankish
@frankish ^^^更新 – greymouser