Репозиторий iPhone для данных - PullRequest
0 голосов
/ 22 октября 2010

Я совершенно нуб в разработке для iPhone. Просто начните неделю назад. Я пытаюсь заставить эту таблицу работать.

У меня есть класс, который я создал под названием CustomerRepository с таким методом

 - (CustomerRepository *) init {

self = [super init];

if (self) {


    customerArray = [[NSMutableArray alloc] init];

    Customer *cust1 = [[Customer alloc] init];
    cust1.name = @"cust1";  

    [customerArray addObject: cust1];

    [cust1 release];
}


return self;

}

- (NSMutableArray *) GetAll {

    NSMutableArray *returnCustomerArray = [[[NSMutableArray alloc] init] autorelease]; 

    for(Customer *cust in customerArray)
    {
        Customer *copy = [[Customer alloc]init];
            copy.name = cust.name;
        [returnCustomerArray addObject:copy];
        [copy release];
    }

    return returnCustomerArray;

}

Теперь в моем контроллере

  @synthezise customerArray;

  viewDidLoad {

    CustomerRepository *custRepo = [[CustomerRepository alloc] init];

customerArray = [custRepo GetAll];

[custRepo release];
  }


 - (NSInteger)tableView:(UITableView *)tv numberOfRowsInSection:(NSInteger)section {

    // It always throw an exception here about -[UITableViewRowData count]: unrecognized selector sent to instance
    return [customerArray count];
}

В моем коде определенно что-то не так, вы, ребята, можете помочь мне указать, что не так. Скорее всего, доступ к экземпляру, который уже выпущен ....

1 Ответ

2 голосов
/ 22 октября 2010

Вам необходимо сохранить массив, возвращаемый GetAll. Попробуйте это:

viewDidLoad {

  CustomerRepository *custRepo = [[CustomerRepository alloc] init];

  customerArray = [[custRepo GetAll] retain];

  [custRepo release];
}

Если вы не сохраните его, то ваш автоматический выпуск в -GetAll означает, что возвращенный массив будет в конечном итоге освобожден. Когда ваш метод -numberOfRowsInSection срабатывает, он обращается к экземпляру dealloc'd.

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