Я хочу сохранить список записей данных в NSMutableArray для использования в UITableView. На других языках я бы использовал простую структуру типа для определения структуры записи, но я понимаю, как сделать это в Obj-C, чтобы определить новый класс. Я сделал это следующим образом:Objective C Добавление пользовательских объектов в NSMutableArray
@interface CustSuppListItem : NSObject
@property (nonatomic, copy, readwrite) NSString *acCode;
@property (nonatomic, copy, readwrite) NSString *acCompany;
@property (nonatomic, copy, readwrite) NSString *acContact;
@property (nonatomic, assign, readwrite) double osBalBase;
@property (nonatomic, assign, readwrite) unsigned int acAccStatus;
@end
@implementation CustSuppListItem
@synthesize acCode, acCompany, acContact, osBalBase, acAccStatus;
@end
В viewDidLoad моего UITableViewController я создаю экземпляр массива:
tableListDataArray = [[NSMutableArray alloc] init];
После того, как я извлекаться мои данные, я добавляю его в массив следующим образом:
CustSuppListItem *custSuppItem = [[CustSuppListItem alloc] init];
[custSuppItem setAcCode:[jsonCustSuppRecord getStringForKey:@"acCode"]];
[custSuppItem setAcCompany:[jsonCustSuppRecord getStringForKey:@"acCompany"]];
[custSuppItem setAcContact:[jsonCustSuppRecord getStringForKey:@"acContact"]];
[custSuppItem setOsBalBase:[jsonCustSuppRecord getDoubleForKey:@"osBalBase"]];
[custSuppItem setAcAccStatus:[jsonCustSuppRecord getIntForKey:@"acAccStatus"]];
[tableListDataArray addObject:custSuppItem];
[custSuppItem release];
В моем методе cellForRowAtIndexPath таблицы, я получить данные для текущей ячейки следующим образом:
CustSuppListItem *listDataRecord = [tableListDataArray objectAtIndex:indexPath.row];
[cell.lblCompanyName setText:listDataRecord.acCompany]; // EXC_BAD_ACCESS here
[cell.lblAcCodeContact setText:[NSString stringWithFormat:@"%@, %@",
listDataRecord.acCode, listDataRecord.acContact]];
[cell.lblBalance setText:[Utils fmtNumber:listDataRecord.osBalBase withDecPlaces:2]];
[cell.lblStatus setText:[Utils exchAccStatusDesc:listDataRecord.acAccStatus]];
return cell;
В методе dealloc для контроллера представления я выпустить NSMutableArray:
[tableListDataArray release];
Я новичок в Obj-C, поэтому было бы здорово, если бы кто-то мог бы подтвердить все, что я сделал до сих пор марок смысл и порядок. Я получаю прерывистую ошибку EXC_BAD_ACCESS при попытке прочитать свойство acCompany (см. Комментарий рядом с строкой), поэтому что-то не должно быть прав.
Любая помощь приветствуется,
Джонатан
вы сохранить tableListDataArray в viewDidLoad? –
Любые другие детали с консоли при ошибке EXC_BAD_ACCESS? В стороне, дизайн (инкапсуляция объекта CustSuppListItem как класс) является очень типичным дизайном ObjC. – FluffulousChimp
@vpdn Почему «сохранить»? 'init' возвращает объект с' keepCount' +1 – FluffulousChimp