2013-09-18 4 views
0

У меня есть вид 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

Но разве вы не сказали, что элементы определены в глобальном 'NSMutableArray'? Это идея разделения представления из источника данных. Даже если ваше представление iCarousel будет освобождено, вы все равно можете ссылаться на информацию (элементы), которые его заполняют. – LuisCien

+0

измененный массив хранится в классе контроллера класса icarousel, поэтому, если контроллер просмотра уходит, то и элементы. и когда я говорю, что глобальное значение i означает его определенное в файле .h – Katushai

+0

Ну, тогда сохраните источник данных где-то в другом месте. Вы можете использовать CoreData для этого. Или, если вы не хотите иметь дело с этим, объявите 'NSMutableArray' в AppDelegate или где-то подобный, который вы знаете, который не будет освобожден. Другой вариант - создать для него Singleton. Существует много вариантов. – LuisCien

ответ

1

Если объект, содержащий элементы, заполняющие iCarousel, освобождается, вы можете сохранить источник данных в другом месте. Вы можете использовать CoreData для этого. Или, если вы не хотите иметь дело с этим, объявите NSMutableArray в AppDelegate или где-то подобный, который вы знаете, который не будет освобожден. Другой вариант - создать для него Singleton. Существует много вариантов.

Надеюсь, это поможет!

0

Если вы создаете карусель при его представлении, он освободит существующий и создаст новый. Я не думаю, что для вашего случая это нужно выделять каждый раз, когда вы представляете.

if(self.carousel == nil) { 
    self.carousel = [[iCarouselExampleViewController alloc] initWithNibName:@"iCarouselExampleViewController" bundle:nil]; 
} 
[self presentViewController:self.carousel animated:YES completion:nil]; 
[self.carousel.carousel reloadData]; 
Смежные вопросы