我开发了一个应用程序来处理我能够解决的非常相似的问题。我期待一个复杂的解决方案,但它真的很简单。以下是您可以解决的方法:
1)创建一个新数组,您将在其中接收新项目并将其命名为“moreItems”,当然也可以合成它。
@property (nonatomic, readonly) NSMutableArray *moreItems;
2) 在与您的 TableView 或 CollectionView 链接的 ViewController 的 viewDidLoad 中,分配/初始化此数组:
moreItems = [[NSMutableArray alloc] init];
3)现在您需要添加现有数组,让我们说它是“项目”到您刚刚创建的名为“moreItems”的新数组中。您可以使用“addObjectsFromArray”来做到这一点
[moreItems addObjectsFromArray:[channel items]];
'channel items' 包含它之前收到的对象,它将这些项目添加到新创建的名为 'moreItems' 的数组中。我假设您正在从某个 Web 服务收集数据,因此您可以在 connectionDidFinsihLoading 中实现此步骤。
4) 现在更改 TableView/CollectionView 的数据源并将其替换为新数组“moreItems”
5) 下一个问题是您不想重新加载整个 tableview 并且想要处理新项目。要拥有此功能,您需要持久化项目。您可以使用任何您喜欢的归档或核心数据。
6) 已经获取的项目,你将不得不坚持他们让我们说存档。并在用户打开应用程序时在 tableview 中显示它们,同时它会抓取更多在 Web 服务上更新的项目。所以首先立即显示持久化的项目,然后处理新项目。
7)您需要寻找一些独特的对象,在我的情况下它是“链接”,因为每个项目都有不同的链接,我可以在此基础上对它们进行排序和处理。你还需要使用
- (BOOL) isEqual:(id)object
比较 Web 服务上的链接和 tableview 中已经存在的链接。此步骤是必要的,因为这样您的应用程序将不会添加带有已在 tableview 中的链接的项目。
8)如果每个项目都有某个日期,您可以使用该日期对它们进行排序并使用“sortUsingComparator”将新的显示在顶部
9)您还需要使用“[[self tableView] insertRowsAtIndexPath:rows withRowAnimation:UITableViewRowAnimationTop”来向用户显示新项目已添加到早期项目之上。
希望这可以帮助。