2013-02-09 3 views
1

Я надеюсь, что это имеет смысл ... У меня есть NSMutableArray, в котором я пытаюсь хранить несколько UIScrollView. Каждый UIScrollView будет иметь несколько изображений, и конечной целью является возможность разрешить пользователю для вертикального перемещения по категориям (каждый экземпляр UIScrollView) и по горизонтали для каждого изображения в этой категории (каждый экземпляр UIImageView). Пока, пока я не получу этот код, я просто создаю 1 UIScrollView с 1 ​​изображением, и я добавляю это в scrollViewManager. Кажется, это все правильно добавляет, но когда я оставляю эту функцию, игра заканчивается. Мой массив пуст. Я не понимаю. Должен ли я делать какую-то глубокую копию, когда добавляю в массив, чтобы он не разрушался. Возможно, я это выясню, когда я проснусь завтра, но пока я хотел бы разбить все на виду. Заранее спасибо!Объекты NSMutableArray теряются

EDIT: Извините за отсутствие деталей, я разместил это довольно поздно. Мой проект использует ARC, поэтому я не выпускаю scrollView где угодно. Вот декларация scrollViewManager в моем файле заголовка:

@property (nonatomic, retain) NSMutableArray *scrollViewManager; 

Вот код я использую, чтобы получить мой Scrollview:

UIScrollView *test = (UIScrollView*) [self.scrollViewManager objectAtIndex: 0]; 

А вот код для инициализации Scrollview и массив:

scrollViewManager = [[NSMutableArray alloc] initWithCapacity: 1]; 

     UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 
     [scrollView setBackgroundColor:[UIColor blackColor]]; 
     [scrollView setCanCancelContentTouches:NO]; 
     scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite; 
     scrollView.clipsToBounds = YES;  // default is NO, we want to restrict drawing within our scrollview 
     scrollView.scrollEnabled = YES; 
     scrollView.pagingEnabled = YES; 

     NSString *imageName = @"pic1.png";//[NSString stringWithFormat:@"pic%d.jpg", i+1]; 
     UIImage *image = [UIImage imageNamed:imageName]; 
     UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; 

     // setup each frame to a default height and width, it will be properly placed when we call "updateScrollList" 
     CGRect rect = imageView.frame; 
     rect.size.height = 400; 
     rect.size.width = 300; 
     imageView.frame = rect; 
     imageView.tag = 1; // tag our images for later use when we place them in serial fashion 
     [scrollView addSubview:imageView];    

     [self.scrollViewManager addObject: scrollView]; 
+0

В вашей первой строке у вас есть 'scrollViewManager', в конце вашего метода у вас есть' self.scrollViewManager'. Какой из них опечатка? – sosborn

+0

Является ли scrollViewManager объявленным слабым свойством? – lnafziger

+0

Код, который вы опубликовали, в порядке, сам по себе. Вам нужно показать более подробную информацию: какова область действия 'scrollViewManager'. Где и как оно объявляется? Каков пример кода, который вы вызываете, который возвращает пустой 'scrollViewManager' после выполнения кода выше? – Joel

ответ

0

Есть некоторые вещи, которые расплывчаты. Например:

  1. Вы используете ARC, если нет, и вы выпускаете свой scrollView где угодно?
  2. Вы используете функцию авто-создания-синтеза?
  3. Какой тип свойства ваш scrollViewManager (слабый, сильный и т. Д.).

Если вы создаете ваши Ивар автоматически при определении свойств, ваш Ивар следует назвать _scrollViewManager вместо scrollViewManager.

Использование self.scrollViewManager является правильным при использовании этого метода.

Я всегда делаю такие вещи наоборот. Когда у меня есть свойство, как это:

@property (nonatomic, strong) NSMutableArray* myArray; 

Я всегда инициализировать их с помощью self ключевого слова:

self.myArray = [NSMutableArray new]; 

И при изменении его, я всегда использовать сгенерированный Ивара:

[_myArray addObject:myFineObject]; 

Я думаю, что это то, что я продолжал использовать при переходе из не-ARC в ARC. Не уверен, что это все еще путь, но он работает, как и ожидалось.

+0

1. Я использую ARC, поэтому я не выпускаю scrollView где угодно. 2. синтезировать scrollViewManager; <- это? Да, эта строка кода появляется сразу после @implementation. 3. свойство (неатомное, сохранение) NSMutableArray * scrollViewManager; Простите мое невежество, но я опустил @ и не знаю, как добавить его в комментарий, потому что он пытается пометить пользователей. –

 Смежные вопросы

  • Нет связанных вопросов^_^