Получение exc_bad_access в UITableViewController при получении объекта из NSMutableArray - PullRequest
0 голосов
/ 21 марта 2012

У меня есть подкласс UITableViewController, и я инициирую подкласс с NSMutableArray другого пользовательского класса:

#import <UIKit/UIKit.h>
#import "NUBCheckpointModel.h"

@interface NUBUserCheckpointModel : NSObject

@property (nonatomic,assign) NSString* objId;
@property (nonatomic,assign) NSString* userId;
@property (nonatomic,assign) NSString* checkpointId;
@property (nonatomic,assign) NSDate* dateAdded;
@property (nonatomic,assign) NUBCheckpointModel* checkpoint;

+ (NUBUserCheckpointModel*) fromJson: (NSString*)json;

@end

Этот массив, который генерируется из другого ViewController, передается в этот подклассный TableViewController, в котором содержится это свойство

@property (nonatomic,retain) NSMutableArray* userCheckpointData;

Это свойство установлено так:

- (id)initWithFrame: (CGRect)frame withType: (TableType)typeOfTable fromParent: (UIViewController*)parent data: (NSMutableArray*)ucpData
{
    self = [self init];
    if (self) {
        self.tableView = [[UITableView alloc] initWithFrame:frame];
        self.parentController = parent;
        self.userCheckpointData = ucpData;
        [self styleTable];
        [self addPullToRefreshHeader];
        typeCategory = typeOfTable;

    }
    return self;
}

С этой частью все в порядке, и любые манипуляции, включая попытки получить объект из массива, работают нормально. Я проверял это.

Код, который я использовал для проверки массива:

NUBUserCheckpointModel* model = [self.userCheckpointData objectAtIndex:0];
NSLog(model.objId);

Однако этот самый код при использовании здесь:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

Дает мне exc_bad_access. Могу ли я знать, почему это происходит? Я не могу понять, почему. Я использую ARC, кстати. Спасибо.

1 Ответ

1 голос
/ 21 марта 2012

При добавлении свойства вам необходимо позаботиться об управлении памятью. Для строки не рекомендуется устанавливать свойство assign.

Вместо этого выполните следующие действия:

@property (nonatomic,copy) NSString* objId;
@property (nonatomic,copy) NSString* userId;
@property (nonatomic,copy) NSString* checkpointId;
@property (nonatomic,retain) NSDate* dateAdded;
@property (nonatomic,retain) NUBCheckpointModel* checkpoint;
...