コードを使用して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の結果を文字列に解析してから、そこから整数を解析することです。
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番目の例を書いたと思います...
プロパティが正しく定義されていません。
そのはず:
@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]];
必要に応じてintegerValueおよびintValueを使用します。