如何在不丢失数据的情况下切换回视图控制器

时间:2013-09-18 16:10:05

标签: ios objective-c cocoa-touch

我有一个iCarousel视图,对于那些不知道它是什么的人来说,它的工作方式很像UITableView或UICollectionView。如果您愿意,我们可以假装我正在使用其中之一。

无论如何,我的iCarousel已经有很多项目了。它们在全局NSMutableArray中以“items”的名称定义。我的问题是当我将视图切换远离旋转木马一分钟时,当我切换回来时,物品消失了。我相信这是因为当我切换视图时,轮播被取消分配或参考丢失。当我尝试重新加载它时,我使用此代码:

self.carousel = [[iCarouselExampleViewController alloc] initWithNibName:@"iCarouselExampleViewController" bundle:nil];
[self presentViewController:self.carousel animated:YES completion:nil];
[self.carousel.carousel reloadData];

此代码将我带到一个空的旋转木马。我假设这是因为,如前所述,我丢失了对视图的引用,我不得不重新分配它与initWithNibName调用。无论如何,我如何解决这个问题?我不想丢失课堂上的数据。有什么建议?我将如何首先从不同的视图控制器切换回UITableView?

2 个答案:

答案 0 :(得分:1)

如果保存填充iCarousel的项目的对象被取消分配,则可以将数据源存储在其他位置。您可以考虑使用CoreData。或者,如果您不想处理它,请在AppDelegate中声明NSMutableArray或您知道不会被释放的类似地方。另一种选择是为它创建一个Singleton。有很多选择。

希望这有帮助!

答案 1 :(得分:0)

如果您在展示它时创建carousal将取消分配现有的carousal并创建新的carousal。我不认为你的情况需要在你每次出席时分配。

if(self.carousel == nil) {
   self.carousel = [[iCarouselExampleViewController alloc]   initWithNibName:@"iCarouselExampleViewController" bundle:nil];
}
[self presentViewController:self.carousel animated:YES completion:nil];
[self.carousel.carousel reloadData];