NSInteger считает раз 4?
Я не понимаю, почему этот счетчик 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);
2 ответа
Потому что я указатель, а вы увеличиваете значение указателя, которое, скорее всего, будет с шагом 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
i
не объявлен как NSInteger
, он объявлен как указатель на NSInteger
,
С NSInteger
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;