5

この NSInteger カウンターがデータベース行の実際の値の正確に 4 倍になる理由がわかりません。多分これはばかげているかもしれませんが、私は本当に理解できません...

これまでありがとう:)

NSInteger *i;
i = 0;

for ( NSDictionary *teil in gText ) {

    //NSLog(@"%@", [teil valueForKey:@"Inhalt"]);

    [databaseWrapper addEntry:[teil valueForKey:@"Inhalt"] withTyp:[teil valueForKey:@"Typ"] withParagraph:[teil valueForKey:@"Paragraph"]];

    i+=1;
}

NSLog(@"Number of rows created: %d", i);
4

2 に答える 2

11

iはポインターであり、ポインター値をインクリメントしているため、4ステップ(NSIntegerポインターのサイズ)になる可能性があります。ポインタ*参照を削除するだけで、問題はありません。

NSInteger i = 0;

for ( NSDictionary *teil in gText ) {

理論的には、これを難しい方法で行うことができます。

NSInteger *i;
*i = 0;
for ( NSDictionary *teil in gText ) {
...
*i = *i + 1;
...

差出人: Foundationデータ型リファレンス

#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
#else
typedef int NSInteger;
#endif
于 2011-03-22T22:51:48.383 に答える
1

iは として宣言されておらずNSInteger、 へのポインタとして宣言されていますNSInteger

anNSIntegerは 4 バイトであるため、1 を追加すると、ポインターは実際には 1 のサイズNSInteger、つまり 4 バイトだけ増加します。

i = 0;
...
i += 1; //Actually adds 4, since sizeof(NSInteger) == 4
...
NSLog(@"%d", i); //Prints 4

はオブジェクトではないため、この混乱が生じているためNSInteger、それへのポインターを宣言する必要はありません。予想される動作のために、宣言を次のように変更します。

NSInteger i = 0;
于 2011-03-22T22:49:33.110 に答える