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;
...

来自: 基础数据类型参考

#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 回答