0

ゾンビオブジェクトを有効にした後、UITextField(textLvl)を編集しようとすると、次のエラーが表示されます。

2013-01-13 13:27:10.509 testob[18418:907] *** -[NSConcreteMutableAttributedString
 _UIKBStringWideAttributeValueForKey:]: message sent to deallocated instance 0x2066a1f0

以下に問題の原因となっているコードの部分を投稿しました。具体的には「textField.text=self.storeText;」のようです。一部-私がこれをコメントアウトすると、問題はなくなります。

私は最も経験豊富なiOS開発者ではないことがわかるかもしれませんが、テキストを設定した後、なぜUITextViewの割り当てが解除されるのでしょうか。助けてください!

また、「_ UIKBStringWideAttributeValueForKey」について聞いたことがありません。アイデアはありますか?

皆さんありがとう!

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    NSLog(@"Text began editing");
 self.storeText = textField.text;
  textField.text = @"";

}

- (void)textFieldDidEndEditing:(UITextField *)textField
{
    if (textField == textLvl){

        if ([textField.text isEqualToString:@""]){
            textField.text = self.storeText;
            NSLog(@"No Text");
        }

        self.conv = [textField.text intValue];
        if (self.conv >= 101){
            textField.text = @"100";
            UIAlertView *successAlert = [[UIAlertView alloc] initWithTitle:@"Oh no!" message:@"Can't be higher than 100." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [successAlert show]; }
        }}
4

4 に答える 4

2

これは、フレームワークの内部のバグである可能性があります。(BOOL)textFieldShouldBeginEditing:(UITextField *)textField-を追加し、テキストフィールドテキストをnilに設定してから、テキストフィールドテキストをリセットすることをお勧めします。

于 2013-01-28T15:25:37.003 に答える
1

私のテキストフィールドはxibファイルにあり、そのデリゲートはファイルの所有者に接続されていました。ファイルの所有者が NSObject だったので、これがクラッシュの原因でした。

私は実際には、ファイルの所有者ではなく、デリゲートをセルに接続したかったのです。

于 2013-11-15T11:38:02.787 に答える
1

ここでの本当の答えは、NSString ではなく NSAttributedString を処理するように設定された UITextField を扱っているということだと思います。.xib で定義された UITextField を扱っている場合は、最上位のプロパティ オプションが "Text" になり、オプションが Plain または Attributed になっていることに気付くでしょう。

テキスト フィールドが属性付きに切り替えられた場合、テキスト フィールドをプレーンであるかのように扱い続けると、このエラーが発生することがわかります。

于 2013-01-29T18:34:42.420 に答える
0

楽器を使用するので、保持/リリースを参照してください。

オブジェクト使用インスツルメントの保持、リリース、および自動リリースが発生する場所を確認する必要がある場合は、次のようにします。

機器で実行し、[割り当て]で[参照カウントの記録]をオンに設定します(オプションを設定するには、記録を停止する必要があります)。ピッカーを実行し、記録を停止し、そこにあるivar(datePickerView)を検索し、ドリルダウンすると、すべての保持、リリース、および自動リリースが発生した場所を確認できます。

于 2013-01-13T14:10:03.753 に答える