OS 3.0の高速列挙
-
06-07-2019 - |
質問
OS 3.0に対してiPhoneアプリをコンパイルしようとしましたが、高速列挙を使用するとコンパイルエラーが発生します。
cCommentクラスを含むNSArrayを試しています:
for (cComment* newComment in comments.comments)
このエラーが表示されます
エラー:アクセサのタイプがプロパティ 'comments'のタイプと一致しません。
これは、OS 2.2.1でコンパイルすると問題なく動作します。
エラーを理解しています。列挙型は強く型付けされていませんが、私が知る限り、generics / templatesはObjective-Cでサポートされていないためです。そのため、現在のところ、これを回避する方法は1つしかありません。
for (id commentObject in comments.comments)
{
cComment *newComment = (cComment *)commentObject;
}
誰もが別の方法を考えることができますか?なぜこれが変わったのですか?この変更に関するアップルのドキュメントへのご意見をいただければ幸いです。
編集
Grouchalの提案に従って、私はこれを試しました: NSArray * allComments = comments.comments そして、私は同じエラーを受け取ったので、結局のところ列挙に関するものではないようです
ヘッダーファイルのコードは次のとおりです。
NSMutableArray * comments;
@property(readonly、nonatomic)NSArray *コメント;
およびプロパティは実装ファイルで合成されます。
プロパティをNSMutableArrayに変更することで問題は解決するようですが、なぜそうなるのか、理由はわかりません。任意のアイデア。
ありがとう。
解決 3
この質問を閉じて、iPhone OS 3.0のObjective-Cの変更の下で新しい質問をします。
NSArrayを返すために自分でgetterメソッドを実装しましたが、正常に動作します。また、プロパティをNSMutableArrayに変更しても機能しますが、それは私がやりたいことではありません。
これが変更された理由はわかりません。これはObjective-Cの変更であり、OSの変更ではありません。また、2.2 API 3.0 API間の変更に関するドキュメントにはそれについての言及はありません。
ご回答いただきありがとうございます。
他のヒント
問題はプロパティの定義にあります。次のように変更する必要があります。
@property(読み取り専用、非アトミック)NSMutableArray *コメント
マイナス面として、配列は変更可能として公開されます(ただし、それはあなたが防止したかったと思いますが)。
このコードがOS 3.0で機能しない理由はわかりません。同様のコードが既に機能しています。
コードをに変更するとどうなりますか
NSArray *commentArray = comments.comments;
for (cComment *newComment in commentArray){
.....
}
コードの*を使用してこれを書いたので、気がついたところです。これが問題ですか? for宣言で本当にcComment *にすべきですか?