0

私はobjective-cに非常に慣れていないため、基本的なエラーが発生し、修正方法がわかりません。

  for(ZBarSymbol *sym in syms) {
        resultText.text = sym.data; //sym.data = 0012044012482
        [self phpPost:(int)sym.data];
        break;
    }
}

- (void)phpPost: (int)barcode {
    NSString *theValue = [NSString stringWithFormat:@"%@", barcode]; //problem line
    labelScan.text = theValue;
    //labelScan.text = @"Barcode scanned";
}

@"%@" を使用するとラベルのテキストは正しい (0012044012482) ですが、@"%d" を使用するとそうではありません (アプリを再起動するたびに乱数)。@"%@" (または機能するもの) を使用したいのですが、何らかの理由で xCode でエラーが発生します。エラーを修正する方法がわかりません。

エラーは次のとおりです。

形式はタイプ「id」を指定していますが、引数のタイプは「int」です

最終的には、POST メソッドを使用してそのコード (sym.data) を MySQL データベースに書き込む予定です。

4

4 に答える 4

3

intオブジェクトの場合は、キャストして変換することはできません(%@フォーマット指定子がクラッシュを引き起こしていない場合はそうでなければなりません)。

ラベルに直接割り当てているという事実から、それが であると仮定すると、次textNSStringいずれかのパラメータ タイプを変更する必要がありますphpPost:

- (void)phpPost: (NSString *)barcode {
    labelScan.text = barcode; 
}

intValueまたは渡す前に抽出しsym.dataます:

 [self phpPost:[sym.data intValue]];

で適切な%d書式指定子を使用しphpPost:ます。

于 2012-07-11T18:43:05.527 に答える
2

あなたのバーコードは ではなく、intですNSString。を行う代わりに(int)sym.data、 を渡し[sym.data intValue]ます。それはそれを整数に正しく変換するはずです。

乱数を取得する理由は、文字列オブジェクトをプリミティブ データ型にキャストできないためです:)

于 2012-07-11T18:42:27.000 に答える
0

タイプが何かはわかりませんがsym.data、値自体ではなく、オブジェクトへのポインターである可能性があります。そのポインターを にキャストするintため、使用しているとき%dは、オブジェクトのメモリ位置を効果的に出力しています。そのため、プログラムを実行するたびに変更されます (Objective-C では、警告なしでこれを行うことができます。注意が必要です)。

sym.dataこれを修正するには、オブジェクトのプロパティを使用してオブジェクトから必要な整数値を抽出します。またはオブジェクトをポインターとして渡します。たとえば、次のようにメソッドを呼び出すことができます。

[self phpPost:sym.data];

次に、メソッドを次のように変更します。

- (void)phpPost: (id)barcode {
    NSString *theValue = [NSString stringWithFormat:@"%@", barcode];    
    labelScan.text = theValue;
}
于 2012-07-11T18:42:19.690 に答える
0

わかりました、今日仕事中に少し考えてみたら、INT は自分には向いていないことがわかりました。そのオブジェクトを int にすると、私がしていることに不可欠なデータが失われます。例えば。object=001234 int=1234。ゼロが必要です。したがって、最終的には、オブジェクト (文字列) のままにして、関数に渡すだけです。

正しく動作するようになった後のコードを次に示します。

for(ZBarSymbol *sym in syms) {
        resultText.text = sym.data;
        [self phpPost:sym.data];
        break;
    }
}

- (void)phpPost: (NSString *)barcode {
    labelScan.text = barcode;
    //labelScan.text = @"Barcode scanned"; //My custon label
}

皆様、ご回答ありがとうございます。あなたの答えは使われません。すぐにこの情報が必要になると確信しています。

おお、私のやり方が間違っていたり、間違っていたりした場合は、コメントして教えてください。

于 2012-07-12T02:21:27.713 に答える