0

Ich versuche, eine ausgeschnittene Tabelle in eine flache Liste mit dieser Funktion in didSelectRowAtIndexPath zu konvertieren (Ich habe ein NSArray, das mit der Anzahl der in jedem Abschnitt enthaltenen Elemente initialisiert wird) :Objective-C - Schleife abgespielt, aber Loop-Bedingung ist falsch

Irgendwo ... :-)

self.sectionsArray = [NSArray arrayWithObjects:macroIntNumber(1), macroIntNumber(3), macroIntNumber(12), nil]; 

dann in DidSelectRowAtIndexPath:

int selectedRow = 0; 
int a = indexPath.section; 

for (int i=0; i<indexPath.section-1; i++) { 
    selectedRow += [[self.sectionsArray objectAtIndex:i] intValue]; 
} 
selectedRow += indexPath.row; 

Aber ... Diese Abstürze für indexPath.section = 0 (erste Sekte Ion). Weil die Schleife unendlich gespielt wird bis zum Absturz des NSArray Anrufs ... Seltsam !!!

zwingen for (int i=0; i<0-1; i++) { Werke

zwingen for (int i=0; i<a-1; i++) { Werke

Was bin ich?

Antwort

4

section ist ein NSUInteger, also ist es unsigned. Das Subtrahieren von 1 von 0 in dieser vorzeichenlosen Ganzzahl führt also zu einer sehr großen Zahl anstelle von -1.

Es funktioniert, wenn Sie a verwenden, weil Sie a als int deklariert haben. :)

+1

Nein, du machst Witze ??? Aber das scheint die wahre Ursache für den Effekt zu sein. Auf jeden Fall habe ich noch nie eine so schreckliche Entwicklungsumgebung wie iphone/Objective-C gesehen. Verdammt! Aber warum versuche ich für das iPhone zu kodieren ??? Vielleicht weil ich einen habe :-) Danke für deine Hilfe. – Oliver

+0

Vorzeichenlose Ganzzahlen sind nur gut von C; gib Cocoa dafür keine Schuld. :) – andyvn22

+0

Du müsstest das gleiche Problem Codierung für Windows, Mac, für Windows Mobile, für Blackberry, für Linux, für BSD, für andere * NIX ... über die einzige, die Android immun ist, und nur, weil Es verwendet Java (das keine unsignierten Integer-Primitive unterstützt.) Dies ist kein Fehler in iOS oder Objective-C, aber Sie müssen etwas auffrischen. –

Verwandte Themen