экземпляр класса не может быть ссылкой внутри метода IBAction в target-c

Пишу небольшую карточную игру для айфона,

скажем, у меня есть класс player.h/.m, в котором есть Mutable Array myCard

я пишу

@interface Player : NSObject{
    NSMutableArray *myCard;
}
@property (nonatomic) NSMutableArray *myCard;

@end

в контроллере представления, controller.h

#import "Player.h"
@interface controller : UIViewController {
    Player *playerMe;
}

в контроллере представления, controller.m

 - (Player *)playerMe
{
    if (!playerMe) playerMe = [[Player alloc] init];
    return playerMe; 
}

затем у меня есть метод экземпляра для добавления объекта в playerMe.myCard, до сих пор все в порядке.

У меня есть кнопка, которая была добавлена ​​в IB, и у меня есть действие IB:

- (IBAction)btnSort:(id)sender {
    //do something with self.playerMe.myCard
}

Затем появляется проблема, я смотрю в окно отладки и ищу значение во всех переменных. До того, как кнопка была нажата, у self.playMe.myCard все нормально с определенным там объектом. после нажатия кнопки self.playerMe.myCard становится нулевым и не имеет ничего внутри

Итак, я хотел бы знать, почему self.playerMe.myCard не может быть ссылкой, в то время как self.playMe в порядке, это касается определения @property?

Спасибо!


person JordanSun    schedule 17.11.2011    source источник
comment
Что вы делаете внутри - (IBAction)btnSort:(id)sender; когда кнопка нажата? Где вы инициируете myCard?   -  person Dimme    schedule 17.11.2011
comment
alloc вызывается, когда класс player.m init   -  person JordanSun    schedule 17.11.2011


Ответы (2)


Попробуйте сделать явное свойство retain для myCard. Это может быть утечка при использовании свойства assign по умолчанию.

@property (nonatomic, retain) NSMutableArray *myCard;
person beryllium    schedule 17.11.2011
comment
я пробовал, выдает EXC_BAD_ACCESS. на самом деле, я только делаю сортировку и добавляю подвид в соответствии с массивом playerMe.myCard до того, как кнопка была нажата - person JordanSun; 17.11.2011
comment
Кстати, я сбрасываю объект самостоятельно. self.playerMe, self.playerMe.myCard в консоль. Первые 2 без проблем. Просто self.playerMe.myCard сбросил EXC_BAD_ACCESS. Итак, это должно быть о распределении памяти, но пока не могу это исправить......... - person JordanSun; 17.11.2011

я, наконец, решил проблему, изменив атрибут @property и пользовательский сеттер для myCard

игрок.ч

@property (nonatomic,retain) NSMutableArray *myCard;

игрок.м

- (void)setMyCard:(NSMutableArray *)aCardArr
{
    [myCard autorelease];
    myCard = [[NSMutableArray arrayWithArray:aCardArr] retain];
}

Может быть, это просто базовые вещи, но, как новичок в Objective-C, просто отправьте сообщение здесь для кого-то вроде меня в качестве ссылки.

Спасибо за всю твою помощь

person JordanSun    schedule 18.11.2011