Почему мой объект не добавляется в массив?

#iphone #objective-c #ios #nsmutablearray

#iPhone #objective-c #iOS #nsmutablearray

Вопрос:

Я не могу добавлять объекты в простой NSMutableArray. У меня есть ссылка на objective-c рядом со мной, и она работает для простой строки. Но мне нужно добавить реальные объекты. Пожалуйста, скажите мне, что я здесь делаю не так.

Код:

 TBXMLElement *hubImage = [TBXML childElementNamed:@"image" parentElement:[TBXML childElementNamed:@"images" parentElement:pieceXML]];
if(hubImage) {
    do {
        HubPieceImage *tmpImage = [[HubPieceImage alloc] initWithXML:hubImage];
        [self.images addObject: tmpImage];
        HubPieceImage *tmpImage2 = [self.images lastObject];
        NSLog(@"image  : %@",  tmpImage.asset_url);
        NSLog(@"image 2: %@",  tmpImage2.asset_url);
    } while ((hubImage = hubImage->nextSibling));
}
NSLog(@"count  : %i", [self.images count]);
  

Возвращает это в журнале при циклическом просмотре двух объектов:

 image  : http://farm6.static.flickr.com/5215/5533190578_4v629a79e5.jpg
image 2: (null)
image  : http://farm3.static.flickr.com/2774/5416668522_fdcr19aed3.jpg
image 2: (null)
count  : 0
  

На самом деле массив, кажется, вообще не заполняется (учитывая count: 0)

Спасибо за помощь

Комментарии:

1. Как выглядит реализация self.images?

Ответ №1:

Просто ради удовольствия попробуйте это:

     HubPieceImage *tmpImage = [[HubPieceImage alloc] initWithXML:hubImage];
    NSAssert(self.images, @"Whoops! self.images is NULL");
    [self.images addObject: tmpImage];
  

Возможно, это ваша проблема! То есть self.images может быть равен нулю.

Ответ №2:

Я нашел проблему!
Я не инициализировал массив таким образом:

 self.images = [[NSMutableArray alloc] init];
  

Комментарии:

1. Вероятно, вы захотите добавить -autorelease сообщение, если это сохраненное свойство.

2. Не забудьте принять ваш ответ, чтобы люди не думали, что этот вопрос все еще не решен.

Ответ №3:

 images = [[NSMutableArray alloc] initWithCapacity:10];
  

Пожалуйста, убедитесь, что вы вызвали alloc и init перед