OS 3.0의 빠른 열거
-
06-07-2019 - |
문제
방금 OS 3.0에 대해 iPhone 앱을 컴파일하려고 시도했는데 빠른 열거를 사용할 때 컴파일 오류가 발생합니다.
나는 CComment 클래스를 포함하는 NSARRAY를 살펴 보려고 노력하고 있습니다.
for (cComment* newComment in comments.comments)
그리고이 오류가 발생합니다
오류 : 액세서 유형은 속성 유형 '의견'과 일치하지 않습니다.
OS 2.2.1로 컴파일하면 완벽하게 작동합니다.
오류를 이해합니다. 열거는 강력하게 입력되지 않았지만 제네릭/템플릿이 객관적인 C에서 지원되지 않기 때문에. 그래서 현재 나는 이것에 관한 한 가지 방법 만 볼 수 있습니다.
for (id commentObject in comments.comments)
{
cComment *newComment = (cComment *)commentObject;
}
누구든지 다른 방법을 생각할 수 있습니까? 왜 이것이 바뀌 었습니까? 이 변경에 대한 Apple 문서에 대한 요점은 모두 감사 할 것입니다.
편집하다
Grouchal 제안에 따라 나는 이것을 시도했다 : nsarray* allcomments = comment.comments와 같은 오류가 발생 했으므로 결국 열거에 관한 것이 아닙니다.
코드 양식은 헤더 파일입니다.
NSMutableArray *댓글;
@property (Readonly, Nonomicic) nsarray* 댓글;
그리고 속성은 구현 파일에 합성됩니다.
속성을 NSMutableARRAY로 변경하면 문제가 해결되는 것처럼 보이지만 이것이 사실이 아닌 이유는 없습니다. 모든 아이디어.
감사.
해결책 3
이 질문을 종료하고 iPhone OS 3.0에 대한 목표 C 변경하에 새로운 질문을 할 것입니다.
나는 nsarray를 반환하기 위해 Getter 방법을 직접 구현했으며 잘 작동합니다. 또한 속성을 NSMutableARRAY로 변경하는 것은 작동하지만 실제로는 내가하고 싶은 일이 아닙니다.
왜 이것이 바뀌 었는지 모르겠습니다. 이것은 OS 변경이 아니라 객관적인 C 변경입니다. 또한 2.2 API 3.0 API 사이의 변경 사항에 대한 문서에는 언급이 없습니다.
응답 해 주셔서 감사합니다.
다른 팁
문제는 속성 정의에 있습니다. 변경해야합니다.
@property (readonly,nonatomic) NSMutableArray* comments
단점에서, 당신의 배열은 돌연변이로 노출됩니다 (하지만 그것이 당신이 예방하고 싶었던 것이라고 생각하지만).
이 코드가 OS 3.0에서 작동하지 않아야하는 이유는 없습니다. 이미 비슷한 코드가 작동합니다.
코드를 변경하면 어떻게됩니까?
NSArray *commentArray = comments.comments;
for (cComment *newComment in commentArray){
.....
}
나는 * 내가 당신의 코드에있는 곳에 이것을 썼을 때 방금 알아 차렸다 - 이것이 문제입니까? For Declaration에서 실제로 Comment* 여야합니까?