Tôi gặp sự cố khi tôi gặp ngoại lệ truy cập kém nhưng chỉ khi chạy thử nghiệm (gọi các phương thức tương tự trong bản dựng gỡ lỗi không gây ra sự cố khi xuất hiện). Dự án đã cho phép ARC và tôi đang chạy này trên iPad 5.1 mô phỏng sử dụng Xcode 4.3:EXC_BAD_ACCESS chỉ sử dụng ARC trong khi thử nghiệm
Dưới đây là nơi mà vấn đề cây trồng lên:
- (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);
}
Tại thời điểm khi các phương pháp addObserver:
được gọi là nó doesn' t có vẻ như bất kỳ của các đối tượng liên quan nên đã được phát hành vì vậy những gì có thể gây ra ngoại lệ?
EDIT:
Xin lỗi nếu nó không phải là rõ ràng nhưng các mã trên đã được thực hiện như một phần của một trường hợp thử nghiệm (sử dụng tiêu chuẩn Xcode OCUnit). Cũng trong trường hợp nó làm rõ bất cứ điều gì ở đây là mã có liên quan từ lớp cầu thủ (có ivars và các phương pháp khác, nhưng họ không có bất kỳ kết nối đến tài sản hoặc các phương pháp đang được thử nghiệm):
// 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"];
}
Tôi ước tôi có thể upvote 100 lần này. Cảm ơn! – DexterW
Tôi cũng gặp sự cố này với CocoaPods. Tệp triển khai lớp được bao gồm trong nhóm cho cả mục tiêu thử nghiệm ứng dụng và ứng dụng, ngoại trừ không có cảnh báo lớp trùng lặp trong nhật ký. – Eric