IBAction называется NSCFDictionary и сбой приложения - PullRequest
0 голосов
/ 24 сентября 2010

У меня есть NSObject, настроенный для управления различными элементами на моем экране.

Я инициализирую класс внутри моего View Controller следующим образом:

self.pageSetupClass = [[PageSetup alloc] set:self.pageID];

В IB я добавил свой NSObjectобъект и связал кнопку с IBOutlet на нем.Я также связал его с IBAction, найденным в объекте.Когда я нажимаю на эту кнопку, приложение вылетает, и я получаю эту ошибку:

2010-09-23 15:33:11.640 BookTest10[49139:207] *** -[NSCFDictionary clickSoundByte:]: unrecognized selector sent to instance 0x4b10bc0
2010-09-23 15:33:11.641 BookTest10[49139:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSCFDictionary clickSoundByte:]: unrecognized selector sent to instance 0x4b10bc0'
2010-09-23 15:33:11.642 BookTest10[49139:207] Stack: (
    42195024,
    43352876,
    42203739,
    41666166,
    41662962,
    2915566,
    3413054,
    3422400,
    3417197,
    3042792,
    2934339,
    2965976,
    51188092,
    41474204,
    41470120,
    51181725,
    51181922,
    2958194
)
terminate called after throwing an instance of 'NSException'

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

Если вам нужно, чтобы я опубликовал больше кода, я, конечно, могу.Если у вас есть идеи, я весь слух.Спасибо

Редактировать:

Это содержимое набора функций, которое вызывается при инициализации объекта PageSetup:

-(PageSetup*) set:(int) i {
    self = [super init];
    if(self) {
        self.iD=i;

        self.pageSetupFile = [[NSBundle mainBundle] pathForResource:@"PageSetup" ofType:@"plist"];
        self.pageSetupArray = [[NSMutableArray alloc] initWithContentsOfFile:self.pageSetupFile];
        self.pageInfo = [self.pageSetupArray objectAtIndex:self.iD];

        [self initializeSoundBytes];
        [self initializeAnimations];
        [self initializeToys];

        NSLog(@"Page Setup Initializing: %@", self.pageInfo);
        return self;
    }
    return self;
}

Другое редактирование:

Я установил функцию set для возврата (void) и больше не инициализировал ее с помощью init.

. Теперь я получаю это сообщение об ошибке:

2010-09-23 17:10:05.096 BookTest10[50519:207] *** -[UITouch clickSoundByte:]: unrecognized selector sent to instance 0x4b1b580
2010-09-23 17:10:05.097 BookTest10[50519:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[UITouch clickSoundByte:]: unrecognized selector sent to instance 0x4b1b580'
2010-09-23 17:10:05.099 BookTest10[50519:207] Stack: (
    42166352,
    43324204,
    42175067,
    41637494,
    41634290,
    2886894,
    3384382,
    3393728,
    3388525,
    3014120,
    2905667,
    2937304,
    51159420,
    41445532,
    41441448,
    51153053,
    51153250,
    2929522
)
terminate called after throwing an instance of 'NSException'

Окончательное редактирование:

Я забыл соединить свой объект NSO с владельцем файла в IB.

Ответы [ 2 ]

1 голос
/ 24 сентября 2010

Может быть, когда я переинициализирую этот объект ...

Подожди ... что? В Objective-C вы никогда не вызываете init* методов более одного раза.

В любом случае, основной проблемой является простая проблема управления памятью. Что-то выпускается раньше времени, и так уж получается, что словарь попадает в это место. Включите обнаружение зомби, и это, вероятно, поймает проблему.

0 голосов
/ 24 сентября 2010
self.pageSetupClass = [[PageSetup alloc] set:self.pageID];

Что возвращает set:? Это метод вашего PageSetup класса? Возвращает ли self?
Потому что, очевидно, вы присваиваете pageSetupClass тому, что set: возвращает ...
Если set: не вернет self, попробуйте следующее:

self.pageSetupClass = [[PageSetup alloc] init];
[self.pageSetupClass set:self.pageID];

Edit:

хорошо, если вы добавили объект в IB, объект уже был создан для вас, когда вы загрузили перо, и соединения IBAction и IBOutlet уже были установлены. Когда вы делаете self.pageSetupClass = ..., вы устанавливаете pageSetupClass в новый экземпляр, и это, вероятно, оставляет кнопку с плохой целью для ее IBAction. Если объект был создан из пера, и у вас есть ссылка на него в pageSetupClass из IBOutlet, то просто установите все, что вы хотите в объекте, нет необходимости выделять новый.

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