Mam problem, w którym dostaję złych wyjątków dostępu, ale tylko podczas uruchamiania kompilacji testowania (wywoływanie tych samych metod w kompilacji debugowania nie powoduje problemu). Projekt ARC włączona i biegnę to na symulatorze iPad 5.1 wykorzystaniem Xcode 4.3:EXC_BAD_ACCESS przy użyciu ARC tylko podczas testów
Oto gdzie problem crops up:
- (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);
}
W momencie gdy metoda addObserver:
nazywa się to robi” Wygląda na to, że jakikolwiek z zaangażowanych obiektów powinien zostać zwolniony, co może być przyczyną wyjątku?
Edycja:
Przeproszenia gdyby nie było jasne, ale powyższy kod jest wykonywany jako część testu (stosując standardowe Xcode OCUnit). Również w przypadku wyjaśnia coś tu jest odpowiedni kod z klasy odtwarzacza (tam inne Ivars i metod, ale one nie mają żadnego połączenia do właściwości lub metody w fazie testów):
// 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"];
}
Chciałbym móc to zrobić 100 razy. Dzięki! – DexterW
Też napotkałem ten problem z CocoaPods. Plik implementacji klas został uwzględniony w zasobnikach zarówno w celu testowania aplikacji, jak i aplikacji, z tym że w dziennikach nie było ostrzeżenia o zduplikowanej klasie. – Eric