Ho un problema in cui ottengo eccezioni di accesso errate ma solo quando si esegue una build di test (chiamando gli stessi metodi in una build di debug non si verifica il problema). Il progetto ha permesso ARC e sto correndo questo sul simulatore di iPad 5.1 con Xcode 4.3:EXC_BAD_ACCESS utilizzando ARC durante il test
Ecco dove il problema pota in su:
- (void)testChangeFoodNotification {
Player* p = [[Player alloc] init];
[p addObserver:self forKeyPath:@"food" options:0 context:0]; // <-EXC_BAD_ACCESS (code=2)
p.food += 1;
STAssertTrue(_wasNotifiedOfFoodChange, nil);
}
Nel momento in cui il metodo addObserver:
viene chiamato doesn' Sembra che tutti gli oggetti coinvolti siano stati rilasciati, quindi cosa potrebbe causare l'eccezione?
EDIT:
Scuse se non è chiaro, ma il codice precedente viene eseguito come parte di un banco di prova (usando l'Xcode OCUnit standard). Anche nel caso in cui chiarisce nulla ecco il relativo codice dalla classe giocatore (non c'è altro Ivars e metodi, ma non hanno alcun collegamento con la proprietà o metodi in fase di test):
// Public interface
@interface Player : NSObject
@property (nonatomic, assign) NSInteger food;
@end
// Private interface
@interface Player() {
NSInteger _food;
}
@end
@implementation Player
@synthesize food = _food;
#pragma mark - Getters/Setters
- (void)setFood:(NSInteger)food {
[self willChangeValueForKey:@"food"];
_food = food;
[self didChangeValueForKey:@"food"];
}
Vorrei poter sopravvivere questo 100 volte. Grazie! – DexterW
Ho riscontrato questo problema anche con CocoaPods. Il file di implementazione della classe è stato incluso nei pod sia per l'app che per la destinazione dell'app test, tranne che nei registri non era presente alcun avviso di classe duplicato. – Eric