Метод подсчета подкласса приложения NSMutableArray аварийно завершает работу - PullRequest
0 голосов
/ 02 марта 2010

Кажется, это общая проблема, но я не могу ничего понять из ответов, которые я видел до сих пор. У меня есть приложение для iPhone, которое использует подкласс NSMutableArray для хранения объектов, а также некоторые дополнительные свойства. Подкласс skhCustomArray. Подкласс инициализируется нормально, без объектов в skhCustomArray, и я назначаю его свойству моего контроллера представления, который является указателем на skhCustomArray.

    prescriptionListVC* newPrescList = [[prescriptionListVC alloc] initWithNibName:@"PrescriptionList" bundle:nil];
    newPrescList.curPersonPrescriptions = [personDetails objectAtIndex:0];

Это прекрасно работает. Тем не менее, когда я помещаю свой вид, управляемый моим контроллером вида, в стек контроллера навигации, метод count в методе numberOfRowsInSection приводит к сбою приложения, см. Ниже.

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// Return the number of rows in the section.
return [curPersonPrescriptions count];

}

Что может быть причиной этого? Как действительный пользовательский массив без объектов не может вернуть действительный счетчик? Куда я иду не так? Спасибо.

Ответы [ 3 ]

5 голосов
/ 02 марта 2010

Подкласс NSArray? Вы знаете, что NSArray - это кластер класса , и поэтому его довольно трудно подклассить, верно? На самом деле, это настолько чревато опасностью, что в документации NSArray есть целый раздел , посвященный тому, что вам нужно сделать для его подкласса .

Держу пари, что это источник твоих бед.

2 голосов
/ 02 марта 2010

В этой ситуации вам почти не нужно создавать подкласс NSMutableArray. Вместо этого создайте новый класс, который имеет массив как свойство вместе с дополнительными требуемыми свойствами.

2 голосов
/ 02 марта 2010

Когда вы создаете подкласс NSMutableArray, вам необходимо реализовать некоторые обязательные методы, такие как count, addObject:, insertObjectAtIndex и т. Д. Это то, что мы называем кластером классов.

Если вы хотите добавить еще функциональность / поведение к уже реализованному объекту, вы можете написать «категорию» вместо «подкласса».

Если вы хотите создать подкласс этого класса, вам нужно реализовать все те методы, которые вы собираетесь использовать, поэтому лучше написать категорию NSMutableArray и расширить функциональность, которую вы хотите, и использовать только объект NSMutableArray. Это решит вашу проблему, а также это простой и почти правильный способ добавить новое поведение в уже существующий класс.

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