60

ここで壁に頭をぶつけているような気がします(率直に言って、そうする準備ができています)。

ビューに背景を設定しようとしています。設定する必要がある背景は画像で、このコードを使用しています (これは他の 2 つの UIViewController サブクラスで完全に正常に動作します - これは新しいファイルへのコピー/貼り付けでした):

UIImage *img = [gameNode imageFromKey:@"background"];
UIColor *bg = [[UIColor alloc] initWithPatternImage:img];
self.view.backgroundColor = bg;
[bg release];

前述したように、これは他の 2 つの場所では問題なく機能しますが、ここではラインself.view.backgroundColor = bgスローが発生します。

'NSInvalidArgumentException', reason: '-[UILabel copyWithZone:]: unrecognized selector sent to instance 0x9259840'

これ以上のことはありません。IB で、最上位ビューの参照アウトレットがファイルの所有者に設定されていることを確認しました。プロジェクトをクリーンアップして再起動しました。Xcode を閉じて再起動することさえしましたが、うまくいきませんでした。他に何が欠けていますか?

編集: 前述したように、バック スタック トレースはあまりありません。これだけです。

2012-05-28 13:13:56.997 OOKL[36012:17303] -[UILabel copyWithZone:]: unrecognized selector sent to instance 0x92b79a0
2012-05-28 13:13:56.997 OOKL[36012:17303] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UILabel copyWithZone:]: unrecognized selector sent to instance 0x92b79a0'
*** First throw call stack:
(0x2933052 0x44c7d0a 0x2934ced 0x2899f00 0x2899ce2 0x2935bd9 0xaa92dd 0x6a4f40 0x6a4eeb 0x6bfd60 0xc0191a 0x2934e1a 0x289e821 0xc0046e 0xaa7e2c 0xaa83a9 0xaa85cb 0xb2b59 0xb1969 0x2934ec9 0x9e55c2 0x9e555a 0xa8ab76 0xa8b03f 0xa8a2fe 0xa0aa30 0xa0ac56 0x9f1384 0x9e4aa9 0x2ac6fa9 0x29071c5 0x286c022 0x286a90a 0x2869db4 0x2869ccb 0x2ac5879 0x2ac593e 0x9e2a9b 0x214d 0x20c5)

他には何もありません-前または後。

4

7 に答える 7

197

これは、毎回トレースまたは再現できないXcodeの奇妙なバグの1つだったと思います。問題をIBの特定のUILabelに絞り込みました。に接続するとすぐに、IBOutlet UILabel *このエラーが発生します。

titleさらに調査したところ、名前が問題の原因であることが判明しました。私はラベルを次のように宣言しました

IBOutlet UILabel *title;

名前をに変更するとすぐにgtitle、すべてが期待どおりに機能しました。知るか?..

于 2012-05-28T12:42:19.963 に答える
0

IBOutlet 変数を宣言すると、このエラーが発生し、そのビュー コントローラーで他の何かと同じ名前を付けます。したがって、変数と関数の名前をより賢明に変更すると、問題が解決しました

于 2015-03-04T18:17:50.453 に答える
0

これを試して :

self.view.backgroundColor = [UIColor clearColor];
self.view.layer.backgroundColor = [[UIColor alloc] initWithPatternImage:img].CGColor;
于 2012-05-28T11:58:48.203 に答える
0

この問題は昨夜私に起こり、実際にタイトルという名前のラベルがありました. 名前を別の名前に変更してもうまくいかなかったときに、髪の毛を少し引き裂きました。テキスト フィールドから VC のラベルに NIL 値を送信しようとしていたことが判明しました。4 つの VC があり、ユーザーが VC 1 のテキスト フィールドにタイトルを入力すると、NSString 型のオブジェクトに格納されます。その文字列は VC 4 のラベルに入れられます。ユーザーが VC 1 でタイトルを入力しない場合、NIL が登場します。ユーザーがVC1でタイトルを入力しない場合、文字列オブジェクトにデフォルト値を割り当てることで修正しました。それが誰かを助けることを願っています。

于 2012-09-23T20:42:08.480 に答える
0

ここで提供される回答を使用して解決できた同様の問題がありました。

ただし、私の場合、UIDateLabel というクラスがありました (フォーマットされた方法で日付を表示するために使用されます)。コンパイルして実行すると、上記の NSInvalidArgumentException が発生しました。

私はそのようなクラスがあるのではないかと疑っていましたが、UIDateLabel をグーグルで検索しても、あいまいなヒットしか表示されませんでした (Apple にリンクしているものはありませんでした)。そのため、しばらくの間、命名の問題はないと思っていました...ここで回答を読んで試してみました。

そのため、名前を UIDateLabelAbc に置き換えたところ、すべてが完全に機能しました。XCode がその名前のクラスが既に存在することを通知するため、UIDateLabel に名前を変更しても機能しません。そのため、さらにグーグルで調べたところ、UIKit.framework 継承階層をリストしていると主張する wiki ページが見つかりました。そのリストに、UIDateLabel がリストされていることがわかりました。ただし、そのクラスについて見つけた、つまり存在するという情報はこれだけです。それが何をするのか、その目的などは、現時点では不明のままです。

更新: 命名規則について読んだ後、クラスに UI のプレフィックスを付けることは (控えめに言っても) 良い方法ではないことに気付きました。したがって、クラスに UI のプレフィックスを付けないでください。そうすれば、これやおそらく他の多くの問題を回避できます。

于 2013-09-03T11:48:42.137 に答える
0

これは間違いなく「過剰リリース」の問題のようです。

あなたの例では理由を伝えるのは難しいです(コードはまったく問題ないように見えるため)が、 (の代わりに)copyWithZoneのインスタンスでセレクターを送信しているという事実は、が過剰にリリースされ、現在参照していることを確実に教えてくれますに。UILabelUIColorbgUILabel

後でコード内で、オブジェクトを再度解放しないことを確認してくださいbg

お役に立てれば

最初のコメントの後に編集

を受け取っcopyWithZone unrecognized selector sent to instanceているのは非常に奇妙です。self.viewUIViewsetBackgroundColor unrecognized selector sent to instancecopyWithZone

この問題をよりよく分析するために、例外が発生したときに、デバッガーに次のように書き込みます。

po [self view]
po [[self view] backgroundColor]

すべてが順調に進んでいるかどうかを確認します。

于 2012-05-28T12:00:28.450 に答える