0

ObjectiveCで整数を処理する方法に混乱しています。

私が以下を定義する場合:

NSInteger i = 6;
NSLog(@"%d", i);

コンソールに6を出力することを期待しています。

ただし、オブジェクト内にNSIntegerがあり、これは明らかにポインターによって参照されているため、非常に異なる結果が得られます。

例えば:

@interface Section : NSObject {
NSInteger Id;
}

@property (nonatomic, assign) NSInteger Id;

これは実装で合成されたと想定してください。

次のように、オブジェクトセットの値を作成し、再度アクセスします。

Section *section = [[Section alloc] init];
section.Id = 6;

NSMutableArray *sections = [[NSMutableArray alloc] init];
[sections addobject:section];

Section *sectionB = [setions objectAtIndex:0];
NSLog(@"%d",  sectionB.Id);

これには、メモリアドレス、つまり5447889のような数値を出力するという奇妙な効果があります。値を取得できないのはなぜですか。

私は使用してみました:

NSInteger sid = [[section Id]integerValue];

しかし、その後、無効なレシーバータイプ「NSInteger」という警告が表示され、プログラム受信信号「EXC_BAD_ACCESS」というエラーが発生することがあります。

整数、またはその問題の値を適切に処理する方法を本当に知りたいです。

どうもありがとう

4

3 に答える 3

0

初期化されていないメモリにアクセスしているようです。5447889はポインタ値のようには見えません。通常、ポインタは単語に揃えられており、5447889は単語に揃えられていません。

たぶん、実際のコードを切り取って貼り付けることができます。これには、の代わりに、の代わりにaddobjectなどのタイプミスがあります。addObjectsetionssections

物事をシンプルに保ちNSLog(@"%d", section.Id)、配列をいじることをスキップする場合、それは機能しますか?

于 2010-10-13T09:48:20.620 に答える
0

奇妙な値については、ドミニク・クーニーの答えを参照してください。

EXC_BAD_ACCESSについて:[[section Id]integerValue];NSIntegerをオブジェクトとして解釈し、メッセージを送信しようとするため、機能しintegerValueません。これは機能しません。これは整数であり、オブジェクトではありません。

于 2010-10-13T09:49:58.160 に答える
0

自分の質問に対する答えを見つけたと思います。NSIntegerの値をたとえば6の値に設定することは問題ありません。私が抱えている問題は、以下を使用してJson文字列から返される値に設定していることです。

NSInteger i = [jsonResult objectForKey:@"Id"];

これは次のようになります。

NSInteger i = [[jsonResult objectForKey:@"Id"] integerValue];

私はこれをテストしていませんが、DarkDustが整数ではなくオブジェクトを取得するintegerValueについて言ったことに基づいて意味があります。

ご入力いただきありがとうございます。

于 2010-10-13T10:29:12.233 に答える