web-dev-qa-db-ja.com

'NSInteger'(別名 'int')をタイプ 'NSInteger *'(別名 'int *')のパラメーターに送信する互換性のない整数からポインターへの変換

コードを使用してNSDictionaryから整数を解析しようとしています

_[activeItem setData_id:[[NSString stringWithFormat:@"%@", [dict valueForKeyPath:@"data_id"]] integerValue]];_

しかし、これは私にこのエラーを与えています:Incompatible integer to pointer conversion sending 'NSInteger' (aka 'int') to parameter of type 'NSInteger *' (aka 'int *')

setData_idは、パラメーターとして整数を取ります。文字列に解析したい場合、_[NSString stringWithFormat:@"%@", [dict valueForKeyPath:@"data_id"]]_は完全に機能します。

ここで行っているのは、valueForKeyPathの結果を文字列に解析してから、そこから整数を解析することです。

8
JamEngulfer

setData_id:メソッドはどのように宣言されていますか?

NSInteger ..ではなくNSInteger *を期待しているようです。

次のように宣言されています:

- ( void )setData_id: ( NSInteger )value;

そして、あなたはあなたのコードを使うことができます。

それ以外の場合は、次のように宣言されていることを意味します。

- ( void )setData_id: ( NSInteger * )value;

タイプミスかもしれません...本当に整数ポインタが必要な場合は、次を使用できます(スコープに関して何をしているのかを知っていると仮定します)。

NSInteger i = [ [ NSString stringWithFormat: @"%@", [ dict valueForKeyPath: @"data_id" ] ] integerValue ];
[ activeItem setData_id: &i ];

しかし、NSIntegerを意味しているのに、ポインタ(NSInteger *)を追加してタイプミスをしただけだと思います。

注:setData_idがプロパティの場合、同じことが当てはまります。

@property( readwrite, assign ) NSInteger data_id;

対:

@property( readwrite, assign ) NSInteger * data_id;

最初の例を意味しながら、2番目の例を書いたと思います...

22
Macmade

プロパティが正しく定義されていません。

そのはず:

@property (readwrite) NSInteger data_id;

の代わりに

@property (readwrite) NSInteger *data_id;

ポインタ型が必要な形式に整数値を渡そうとしています。

どちらかを使用します

[activeItem setData_id:[NSString stringWithFormat:@"%@", [dict valueForKeyPath:@"data_id"]]];

または

[activeItem setData_id:[NSString stringWithFormat:@"%d", [[dict valueForKeyPath:@"data_id"] integerValue]]];

整数を設定する必要がある場合は、[NSString stringWithFormat:@"%@"]を削除します。これにより文字列が作成されます。

[activeItem setData_id:[[dict valueForKeyPath:@"data_id"] integerValue]];
4
Leo Natan

必要に応じてintegerValueおよびintValueを使用します。

0
zeeawan