2012-12-20 1 views
1

사용자 지정 대리자 및 데이터 소스가 있습니다. 하지만 초기화 할 때 몇 가지 문제가 있습니다. 내 .h 파일에 이런 식으로.사용자 지정 대리자 및 데이터 소스에 문제가 발생했습니다.

@property (nonatomic, assign) id<UITableViewDelegate> delegate; 
@property (nonatomic, assign) id<KalDataSource> dataSource; 

결과적으로 .m 파일에서 합성 할 때 다음 오류가 발생합니다.

Existing ivar 'dataSource' for property 'dataSource' with assign attribute must be __unsafe_unretained. 

일부 Google 검색 마법을 마친 후 필자는 이와 같은 변수를 사용해야한다고 판단했습니다.

@property (nonatomic, strong) id<UITableViewDelegate> delegate; 
@property (nonatomic, strong) id<KalDataSource> dataSource; 

하지만이 오류가 발생합니다.

linker command failed with exit code 1 (use -v to see invocation) 

아무도 도와 줄 수 있습니까?

친절에 감사드립니다!

답변

0

참석자는 일반적으로 weak입니다.

대리자를 사용하는 개체가 소유하지 않습니다. 이것은 응답 할 수 있거나 응답 할 수없는 개체에 대한 참조 일뿐입니다. Weak은 객체의 실제 소유자가 그것을 해제하면 할당을 해제해야한다고 말합니다. 그러면 약한 참조가 자동으로 nil으로 설정되고 좀비가 생기지 않습니다.

둘째, 문제는 이미 dataSource이라는 속성이 있다는 것입니다.


편집

중복 속성에 대한 나의 이전 문장은 잘못된 것으로 밝혀졌습니다. .h의 선언과 .m 파일의 구현 자 모두에서 setter & 게터를 무시해야합니다.

+0

@dynamic을 사용할 때 여전히 링크 오류가 발생합니다. – Steaphann

+0

@StefGeelen 전체 오류 메시지를 게시 할 수 있습니까? – NSAddict

+0

중복 기호 _KalDataSourceChangedNotification에서 : /Users/geelenstef/Library/Developer/Xcode/DerivedData/Offitel-cpxhgfgbmhddbwbpmyjydsswuygz/Build/Intermediates/Offitel.build/Debug-iphonesimulator/Offitel.build/Objects-normal/i386/AgendaViewController.o /Users/geelenstef/Library/Developer/Xcode/DerivedData/Offitel-cpxhgfgbmhddbwbpmyjydsswuygz/Build/Intermediates/Offitel.build/Debug-iphonesimulator/Offitel.build/Objects-normal/i386/KalViewController.o 아키텍처에 대한 ld : 1 중복 심볼 i386 clang : 오류 : 종료 코드 1로 링커 명령이 실패했습니다 (호출을 보려면 -v 사용). – Steaphann

1

발생하는 오류는 처음으로 올바른 메모리 한정자와 관련이 없습니다. 문제는 한정자없이 어딘가에 백업 iVar을 선언했다는 사실에 있습니다. iVars가 선언되면 암시 적으로 강해지므로 섀도 잉 iVars로 이동하여 __weak 또는 __unsafe_unretained 앞에 붙이면 경고가 사라집니다. 물론 더 나은 솔루션은 Xcode에서 사용자를 위해 종합하므로 백업 iVars를 모두 제거하는 것입니다.

+0

@codiFi KalViewController.h 및 .m을 삭제하여 문제를 해결했지만 당신의 대답을 조금 설명해 주시면 문제를 이해할 수 있습니까? – Steaphann

+0

@StefGeelen 가능한 한 최선을 다해 설명했습니다. 특히 당신을 괴롭히는 것은 무엇입니까? – CodaFi

+0

좋아요. iVars를 뒷받침하는 것이 'id'로 지정된 변수라는 것을 의미한다고 생각합니다. 그리고 두 번 동일한 ID가 유형 ID로 선언되면 Xcode가 불평하기 시작합니까? 이 올바른지 ? – Steaphann

관련 문제