Search code examples
iosincrementnsinteger

NSInteger counts times 4?


I don't understand why this NSInteger counter increments to exactly 4 times the true value of database rows. Maybe this is stupid but I really just don't get it...

Thanks so far :)

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

Solution

  • Because i is a pointer and you are incrementing the pointer value which will most likely be in steps of 4 (size of NSInteger pointer). Just remove the pointer * reference and you should be good.

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

    In theory you COULD do this the hard way.

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

    From: Foundation Data Types Reference

    #if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
    typedef long NSInteger;
    #else
    typedef int NSInteger;
    #endif