Я получаю "- [__ NSArrayI addObject:]: непризнанный селектор, отправленный в экземпляр 0x10dd15ee0" здесь, когда я пытаюсь добавить Object в NSMutableArray. Я не знаю, почему.Добавление объектов в свойства NSMutableArray происходит с непризнанным селектором?
У меня есть набор пользовательских классов, которые являются вложенными. WTEvent имеет свойство NSMutableArray, называемое матами, состоящее из объектов WTMat. маты имеют объекты NSMutableArray из WTBout, называемые боями.
Я хочу, чтобы иметь возможность обновлять один бой в бою, оставив остальную часть боев. Здесь я нахожу коврик, который мне нужен, чтобы назначить бой. Если он не инициализирован, я инициализирую его. Затем, если он пуст, я пытаюсь добавить к нему newBout, и он сработает.
Должен ли я иметь возможность изменять элементы NSMutableArray следующим образом?
// Locate the correct mat
WTMat* mat = [self getMatFromBoutKey:[updateData valueForKey:@"boutKey"]];
WTBout* newBout = [WTBout buildBoutFromDictionary:updateData];
// need to initialize bouts
if ([mat bouts] == nil) {
NSLog(@"Initializing bouts");
NSMutableArray* newBouts = [[NSMutableArray alloc] init ];
[mat setBouts:newBouts];
}
if ([[mat bouts] count]) {
// if bouts has bouts, then adjust the bout stack
NSLog(@"bouts is not empty");
} else {
// if bouts is empty, just add a bout
NSLog(@"Adding a newBout");
NSMutableArray* oldBouts = [mat bouts];
NSLog(@"oldbouts: %@", [oldBouts description]);
[oldBouts addObject:newBout]; // -[__NSArrayI addObject:]: unrecognized selector sent to instance 0x10dd15ee0
}
WTMat.h:
#import <Foundation/Foundation.h>
@interface WTMat : NSObject
{
NSString* matName;
NSString* boutKey;
NSString* multicastAddress;
NSMutableArray* bouts;
}
@property (strong, nonatomic) NSString* matName;
@property (strong, nonatomic) NSString* boutKey;
@property (strong, nonatomic) NSString* multicastAddress;
@property (copy, nonatomic) NSMutableArray* bouts;
@end
Log:
2012-05-12 08:14:00.491 Wrestling Tools[12623:403] Initializing bouts
2012-05-12 08:14:00.492 Wrestling Tools[12623:403] Adding a newBout
2012-05-12 08:14:00.492 Wrestling Tools[12623:403] oldbouts: (
)
2012-05-12 08:14:00.492 Wrestling Tools[12623:403] -[__NSArrayI addObject:]: unrecognized selector sent to instance 0x10dd15ee0
2012-05-12 08:14:00.492 Wrestling Tools[12623:403] -[__NSArrayI addObject:]: unrecognized selector sent to instance 0x10dd15ee0
2012-05-12 08:14:00.494 Wrestling Tools[12623:403] (
0 CoreFoundation 0x00007fff96783fc6 __exceptionPreprocess + 198
1 libobjc.A.dylib 0x00007fff92375d5e objc_exception_throw + 43
2 CoreFoundation 0x00007fff968102ae -[NSObject doesNotRecognizeSelector:] + 190
3 CoreFoundation 0x00007fff96770e73 ___forwarding___ + 371
4 CoreFoundation 0x00007fff96770c88 _CF_forwarding_prep_0 + 232
5 Wrestling Tools 0x000000010dc49343 -[WTUpdater fullUpdate:] + 835
Введите 'po 0x10dd15ee0' в отладчике, чтобы узнать, какой объект отправляется неверным селектором. – fannheyward
Я вижу, что проблема в том, что у меня есть свойство bouts, установленное в 'copy', что дает мне неизменяемую копию, которая не знает метод addObject: я изменил его на сильное, как и на мои другие свойства, я не знаю, какой хаос это может нанести на мое приложение. Как я могу управлять изменяемыми массивами, к которым обращаются из нескольких экземпляров других классов. Это будет кошмар? – Adam