NSMutableArray не хранит никакой объект - PullRequest
0 голосов
/ 12 декабря 2011

Мой NSMutableArray не хранит ни один объект, ни String, ни сложный класс.Я пытался выделить ind init и init как массив.Оба безуспешно.

.m файл:

@interface WorkCentersViewController()
@property (nonatomic, retain) NSMutableArray *selectedWorkCenters;
@end


@implementation WorkCentersViewController
@synthesize selectedWorkCenters;


-(id)init{

    self = [super init];

    if(self){


        //self.selectedWorkCenters = [[NSMutableArray alloc] init]; //doesn't work too
        self.selectedWorkCenters = [NSMutableArray array];

    }
    return self;
}

- (void)dealloc
{
    [selectedWorkCenters release];
    [super dealloc];
}


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    if(cell.accessoryType == UITableViewCellAccessoryCheckmark){      
        ...
    }else{
        //select
        cell.accessoryType = UITableViewCellAccessoryCheckmark; 
        //add
        [self.selectedWorkCenters addObject:[self.workCenters objectAtIndex:indexPath.row]];
        NSLog(@"Sel WC Count: %d", [self.selectedWorkCenters count]); //always 0
    }
}

Почему он не хранит мой объект WorkCenter?Что я делаю не так?

BR, mybecks

Ответы [ 5 ]

1 голос
/ 12 декабря 2011

Возможно, этот конкретный метод init не вызывается? Это UITableViewController? Может быть, вы инициализируете это с initWithStyle:? Я бы установил точку останова на строке, где вы инициализируете массив, просто чтобы проверить.

0 голосов
/ 14 декабря 2011

Я нашел ошибку.

В другом методе у меня было присвоение

selectedWorkCenters = availableWorkCenters;

availableWorkCenters не был инициализирован - всегда 0x0 на экране отладчика.

0 голосов
/ 13 декабря 2011

Хорошо, вот мои идеи.В вашем init вы используете:

// This one is wrong, you are [NSMutableArray array] returns a NSArray which cannot be 
// mutated so you cannot add objects to it. That is why it is not working.
//
self.selectedWorkCenters = [NSMutableArray array];

// This one is wrong because you have a leak here (Although it should work)
//
self.selectedWorkCenters = [[NSMutableArray alloc] init];

Попробуйте:

selectedWorkCenters = [[NSMutableArray alloc] init];

И поместите его в метод viewDidLoad .Надеюсь, поможет.Дайте мне знать :)

0 голосов
/ 12 декабря 2011

Попробуйте инициализировать NSMutableArray следующим образом:

self.selectedWorkCenters = [[NSMutableArray alloc] init];
0 голосов
/ 12 декабря 2011

-initWithNibName:bundle: является назначенным инициализатором UIViewController, поэтому любой код инициализации должен отображаться в переопределении этого метода. Если это является подклассом UITableViewController, Марк прав, что initWithStyle является хорошим местом для его размещения.

Кроме того, в общем случае viewDidLoad / viewDidUnload дает вам хорошее место для выделения / освобождения структур данных, которые нужны вашему представлению, но которые могут быть воссозданы при необходимости.

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