NSMutableArray가 합성 된 속성으로 정의되어 있고 NSMutableArray의 새로 만든 인스턴스가 할당되었습니다. 그러나이 후에 NSMutableArray에 객체를 추가하려고 할 때마다 항상 내 응용 프로그램이 중단됩니다.적절한 초기화 후 추가 할 때 NSMutableArray가 충돌합니다.
Page.h
@interface Page : NSObject
{
NSString *name;
UIImage *image;
NSMutableArray *questions;
}
@property (nonatomic, copy) NSString *name;
@property (nonatomic, retain) UIImage *image;
@property (nonatomic, copy) NSMutableArray *questions;
@end
Page.m
@implementation Page
@synthesize name, image, questions;
@end
관련 코드는
Page *testPage = [[Page alloc] init];
testPage.image = [UIImage imageNamed:@"Cooperatief leren Veenman-11.jpg"];
testPage.name = [NSString stringWithString:@"Cooperatief leren Veenman-11.jpg"];
testPage.questions = [[NSMutableArray alloc] init];
[testPage.questions addObject:[NSNumber numberWithFloat:arc4random()]];
디버거는 순간 내가 사용하는 것을 알 수 testPage.questions = [[NSMutableArray alloc] init];
testPage.questions 유형이 NSMutableArray *에서 __NSArrayL * (또는 __NSArrayI *, 확실하지 않음)으로 변경됩니다. 이 문제가 의심 스럽지만 극도로 이상하게 느껴집니다. 여기에 무슨 일이 일어나는 지 아는 사람이 있습니까?
흠, 그것이 그럴 것이라고 생각하지 않았지만 작동합니다! 나는 여기에 많은 질문들이 무언가가 가변적 일 때마다 복사본을 사용할 것을 제안하기 때문에'copy'를 사용했다. 감사 : D – SpacyRicochet
@SpacyRicochet : 결과 속성 값이 * 불변 *인지 확인하려면'copy'를 사용하십시오. 'NSString' 속성으로 이것을 가장 자주 보았습니다 : 문자열 자체가 당신 밑에서 바뀔 수 없도록 복사합니다. 당신의 속성이 변경 가능하기로되어 있기 때문에, 당신은'copy'를 사용할 수 없습니다. :) –
고마워요! 이것은 내가 알아내는 데 더 오래 걸렸을 것입니다. :) –