0
我有一個UITableView,我有兩個數據源。Objective-C的雙指針。改變指針指向的位置。
@property(strong)NSArray* mediaItems;
@property(strong)NSArray* likesItems;
在很多情況下,我需要交換兩個源。因此,有很多if語句我檢查
if (self.activePage == kDrawingsPage) self.mediaItems = responseObject;
else self.likesItems = responseObject;
我想要做的是不需要像這樣繼續檢查。使用雙指針。我不能使用雙指針來做類似的事情嗎?在我需要訪問我可以簡單地做
- (NSInteger)collectionView:(UICollectionView*)collectionView numberOfItemsInSection:(NSInteger)section {
NSArray* arr = *self.activeItems;
return [arr count];
}
而不是
- (NSInteger)collectionView:(UICollectionView*)collectionView numberOfItemsInSection:(NSInteger)section {
if (self.activePage == kDrawingsPage) [self.mediaItems count];
else [self.likesItems count];
}
不應在雙指針或數據的地方(這不起作用)
NSArray** activeItems = &self.mediaItems;
然後在這種情況下類似的工作?如果它不能以其他方式工作,我可以最小化這些if語句。
一般來說,這將起作用,但值得注意的是,這段代碼很可能會導致崩潰。像這樣的派生數據源屬性的問題在於,它可以在集合視圖在數據源調用之間重新加載時更改,這可能會導致一些異常,通常是嘗試訪問不存在的數組索引的超出範圍的異常。理想情況下,將會有一個實際的支持ivar,並在觸發視圖重新加載的同時進行修改。 – Dima
@Dima是的。更好的解決辦法是把它們分開。一個視圖/視圖控制器應該只負責一個頁面。 –
迪馬說數據源可能會在你不知情的情況下改變是正確的。如果你想讓它們在同一個視圖控制器中,我會創建一個新的NSArray屬性作爲集合視圖的數據源,然後當你設置activePage(自定義setter或kvo)時,使用mediaItems或者likesItems設置NSArray屬性 – SomeGuy