Возникли проблемы при добавлении объектов в NSMutableArray в Objective C - PullRequest
1 голос
/ 12 мая 2009

Я использую iPhone SDK, и у меня возникла проблема с выполнением чего-то простого. Я пытаюсь добавить объект NSNumber в переменную экземпляра NSMutableArray . Я попытался добавить NSNumber card в NSMutableArray seenCardsArray , однако без прерывания он не добавляется в массив. Вот код.


/////////////////////////////////////////////////////
// Inside the header file Class.h
@interface MyViewController : UIViewController {
   NSMutableArray *viewedCardsArray;
   //snip ...
}
@property (nonatomic, retain) NSMutableArray *viewedCardsArray;
@end

/////////////////////////////////////////////////////
// Inside the methods file Class.m
#import "StudyViewController.h"

@implementation StudyViewController
@synthesize viewedCardsArray
  //snip ...

- (IBAction)doShowCard {
   //snip ...
   NSNumber *cardIdObject = [[NSNumber alloc] initWithInt:(int)[self.currentCard cardId]];
   [viewedCardsArray addObject: cardIdObject];
   [cardIdObject release];
}

Таким образом, этот код выполняется и, похоже, не имеет утечки (согласно инструменту производительности Leaks). Однако при пошаговом выполнении кода CardIdObject ни в коем случае не появляется в просматриваемых картах .

Просматривая SO, я знаю, что эти основные вопросы довольно часто встречаются у новичков ObjC (таких как я), поэтому заранее приносим извинения!

Ответы [ 2 ]

17 голосов
/ 12 мая 2009

Вы инициализировали свой viewedCardsArray? Если вам не нужно куда-то - обычно это делается методом init для вашего класса:

- (id)init
{
    self = [super init];
    if(self) {
        viewedCardsArray = [[NSMutableArray alloc] init];
    }
    return self;
}

Затем он высвобождается в методе dealloc:

- (void)dealloc
{
    [viewedCardsArray release];
    [super dealloc];
}
3 голосов
/ 12 мая 2009

Perspx наметил один способ инициализации массива. Однако вы также можете использовать методы класса, предоставляемые NSArray:

self. viewedCardsArray = [NSMutableArray array];

Это может идти в init или в другом месте.

Примечание. Объект будет автоматически освобожден.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...