2012-12-27 1 views
3

저는 Xcode에서 NSNotificationCenter으로 작업 중이므로 userInfo을 사용하여 NSDictionary을 내 알림에 첨부하려했습니다. 나는 응용 프로그램을 실행하고 알림을 게시 할 때NSArray는 두 개 이상의 객체가있는 경우 응용 프로그램을 중단합니다

NSArray *objects = [NSArray arrayWithObjects:@"Example Name", @"Example Description", @"Example Date", nil]; 
NSArray *keys = [NSArray arrayWithObjects:@"name", @"description", @"date", nil]; 
    NSDictionary *dict = [NSDictionary 
           dictionaryWithObjects:objects 
           forKeys:keys]; 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"Notification" object:nil userInfo:dict]; 

, 그것은 라인에 충돌 :

NSArray *keys = [NSArray arrayWithObjects:@"name", @"description", @"date", nil]; 

가 나중에 배열 크기가 2 개체를 초과하는 경우, 응용 프로그램이 충돌 할 것으로 나타났다.

코드를 아래의 스 니펫으로 변경하면 작동 할 것입니다.

NSArray *objects = [NSArray arrayWithObjects:@"Example Name", @"Example Description", nil]; 
NSArray *keys = [NSArray arrayWithObjects:@"name", @"description", nil]; 
NSDictionary *dict = [NSDictionary 
            dictionaryWithObjects:objects 
            forKeys:keys]; 
     [[NSNotificationCenter defaultCenter] postNotificationName:@"Notification" object:nil userInfo:dict]; 

내가이 문제를 해결할 수있는 방법이 있습니까? 아니면 내가 끔찍한 일을하고 있습니까?

+0

ARC를 사용하도록 설정 했습니까? 알림을 게시하기 전에 대괄호가 누락되어 있습니다. 복사하여 붙여 넣기 만하는 실수입니까? –

+0

작동해야합니다 - 사용중인 개체가 유효합니까? – Vervious

+0

이 예제는 문자열 리버럴을 사용하므로 유효한 객체 여야합니다. 사고가 났을 때 예외가 있습니까? 또는 EXC_BAD_ACCESS? 스택 트레이스는 어떻게 생겼습니까? – eyebrowsoffire

답변

2

이 코드가 컴파일됩니까? 프로젝트를 정리하고 다시 빌드 해보십시오.

+0

있습니다. 내가 말했듯이, 각 배열에서 세 번째 객체를 제거하면 작동합니다. – Sokco

+0

Xcode를 닫은 다음 다시 시작하십시오. 부두 야. – sqreept

+0

그리고 당신이 투표를하지 않으면. 이유를 알려주세요. 그것은 무료입니다. – sqreept