2009-06-19 10 views
2

OS 3.0に対して自分のiPhoneアプリをコンパイルしようとしましたが、高速列挙を使用するとコンパイルエラーが発生します。OS 3.0での高速列挙

私はcCommentクラスを含むNSArrayのを通過しようとしています:

for (cComment* newComment in comments.comments) 

そして、私はこのエラーに

エラーが表示されます。アクセサのタイプは、プロパティのコメント "のタイプと一致していません。

これは、OS 2.2.1でコンパイルすると完全に機能します。

私はこのエラーを理解していますが、enumaretionは強く型付けされていませんが、私が知っている限りジェネリックス/テンプレートはobjective-cではサポートされていません。だから私はこれの周りの方法を見ることができます:

for (id commentObject in comments.comments) 
{ 
    cComment *newComment = (cComment *)commentObject; 
} 

誰かが別の方法を考えることができますか?なぜこれが変わったのですか?この変更についてのAppleの文書へのあらゆる点に感謝します。 にNSArray * allCommentsの=のcomments.comments と、それはここにすべての

後の列挙についてはそのないようですので、私は同じエラーを得たコード形式です:

EDIT

Grouchalの提案に続いて、私はこれを試してみましたヘッダファイル:

NSMutableArray * comments;

@property(readonly、nonatomic)NSArray * comments;

このプロパティは、実装ファイルで合成されます。

プロパティをNSMutableArrayに変更すると問題は解決したようですが、なぜこのようにする必要があるのか​​わかりません。何か案は。

ありがとうございました。

答えて

0

私はこの質問を閉じて、iPhone OS 3.0のobjective-cの変更の下で新しい質問をします。

私はgetterメソッドを自分自身でNSArrayを返すように実装しましたが、うまく動作します。NSMutableArrayにプロパティを変更することもできますが、実際にはやりたいことではありません。

なぜこれが変更されたのかわかりません。これはOSの変更ではなく、客観的な変更です。また、2.2 API 3.0 API間の変更の文書化には言及していません。

お返事ありがとうございます。

+0

何らかの理由でコンパイラがより厳しいかもしれません。 (どちらのコンパイラを使用していても、Xcodeの新しいバージョンでは選択できます)この質問を閉じる必要はありません。あなた(または私)はもっと適切なものを使ってそれを再タグ付けすることができます。 –

+0

私はMac開発とXcodeにはまったく新しいので、どのコンパイラがいいか分からないときはどういう意味ですか? Xcodeのメイン画面にあるドロップダウンボックスを使用して自分の設定を変更しています(おそらく問題です)。 私はこのサイトを初めて利用しているので、質問を処理する適切な方法についてもわかりませんが、新しい質問を提出しました。あなたのアドバイスを飾りましょう。 新しい質問 - http://stackoverflow.com/questions/1019365/objective-c-changes-between-os-2-2-1-and-os-3 –

0

OS 3.0ではこのコードが機能しない理由はありません。私はすでに同様のコードが動作しています。これが問題である - ?あなたは

NSArray *commentArray = comments.comments; 
for (cComment *newComment in commentArray){ 
..... 
} 

にコードを変更した場合、私はちょうど*あなたのコードである場合、私はこれを書いていると気づいた何が起こる

それは本当に宣言のためのcComment *ですか?

+0

私はあなたの提案を試みたが、問題は列挙に全く関係していないようだ。 NSArray * commentArray = comments.commentsはまったく同じエラーになります 私の質問にはさらに詳しい説明があります –

+0

NSFastEnumerationは、式を一度提供する式を呼び出すだけで十分です。それを独自のスコープ付き変数に割り当てますそのような割り当ては冗長になるであろう。 –

1

問題はプロパティ定義にあります。下がり気味で

@property (readonly,nonatomic) NSMutableArray* comments

(私はそれはあなたが防ぐために望んでいたものだと仮定しても)、あなたの配列が可変として公開されます:あなたはそれを持っているよう変更する必要があります。

+0

正確に私が避けたかったのは、NSMutableArrayはNSArrayのサブクラスなので、これはOS 2.2.1と同じように動作するはずです。 なぜこれがOS 3で変更されたのか分かりません。 –

+0

ivarを変更可能にすることは望ましくない場合は、ivarをNSMutableArray *からidに変更することができます。これは、コンパイルの問題を取り除く "コメント"への参照に動的な(静的ではなく)型付けを使用します。 –

+0

合意しましたが、実際には変更はありません。また、変更可能なサブクラスは、特に変更可能なサブクラスに対してうまく機能するはずです。コードの小さなサンプルでこれを確実に再現し、iPhone OS 3で破損していることを証明できる場合は、間違いなくバグを報告する必要があります:http://bugreport.apple.com –

関連する問題