2016-12-19 8 views
-2

I erstelltNSLog NSArray in NSArray

NSArray *test = @[@[@1,@2,@3,@4], @[@3,@5,@6,@7]]; 

die als nsarray von nsarray berücksichtigt werden.

aber wenn ich es aus mit

NSLog (@"%@", test); or NSLog(@"%@", test[0]); 
NSLog (@"%@", [test ObjectAtIndex: 0]); 

der Prozess endet immer mit

NSException; Signal SIGABRT 
Reason: 'NSInvalidArgumentException', '-[__NSArrayI compare:]:unrecognized selector sent to instance 0x608000262788' 

Bitte helfen Sie mir drucken wollte, konnte mir jemand sagen, wie man mit diesem Problem umgehen? Und im Allgemeinen, wie man das Problem 'Signal SIGABRT' debuggt?

+0

kann u verwenden '[[[Test objectAtIndex: 0] objectAtIndex: 0] objectAtIndex: 0]' da Ihr Array im Inneren mehr Array enthält – Tj3n

+0

Vielleicht möchten Sie Ihre Nachricht bearbeiten, um die Code-Formatierung verwenden. –

+0

Sie machen einen grundlegenden Fehler. '@' ist ein Symbol vor einer Zeichenfolge. 1, 2, 3, 4 und andere Ganzzahlen sind keine Zeichenketten. –

Antwort

0

SIGABRT bedeutet im Allgemeinen, dass es eine nicht abgefangene Ausnahme gibt. Es sollte mehr Informationen auf der Konsole geben.

Ich führe diesen Code ist mein xcode, und es lief richtig.

Werfen Sie einen Blick auf dieses Beispiel, hoffen, dass Sie besseres Wissen

Ich benutze diesen Code

NSArray *array = @[@"1111132324"]; 
NSLog(@"array : %@", array); 
NSLog(@"array[0] : %@", array[0]); 

und ich bekomme Ausgabe:

enter image description here

wie Sie sehen, wenn ich print array gibt die Ausgabe in Klammern '(' und ')'. Wenn ich nur ein einzelnes Element des Arrays drucke, das hier eine Zeichenfolge ist, gibt es keine Klammern.

Wie Sie sagten, Sie Array in Array haben, versuchen wie diese

NSArray *arrayOuter = @[@"1111132324"]; 
NSArray *arrayInner = @[arrayOuter]; 

NSLog(@"array : %@", arrayInner); 
NSLog(@"array[0] : %@", arrayInner[0]); 
NSLog(@"array[0] : %@", arrayInner[0][0]); 

siehe Ausgabe:

enter image description here

Sie Ihre Hierarchie Wörterbuch oder Array oder Mischung aus Array-Wörterbuch verlängern (ist nicht wichtig) bis zu n mal so.

Jeder Schlüssel (für dict)/index (für Array) muss in dieser Hierarchieebene sein. Der Stil des Datenabrufs reicht von der oberen Hierarchie in die untere Hierarchie.

Für Wörterbuch

dict[@"key1"][@"key2"]...[@"keyN"] 

für Mischung dict-arr

//upper object must be dictionary so start with key. 
dict[@"key1"][0][@"key"]..[@"keyN"] or object index. 

für Mix-Array - Dict

//upper object must be array so start with index. 
dict[0][@"key1"][@"key"]..[@"keyN"] or object index. 

HINWEIS: Reihenfolge des Schlüssels und Index wird nach dem Objekt in dieser Hierarchie.

+0

ja, du hast Recht. Es läuft gut. –

+0

Es gibt int-Variablen in Frage in Array verwendet und Sie verwenden String-Variablen im Array, bedeutet, dass Sie falschen Code testen. Bitte lesen Sie die Frage erneut –

0

Ich hoffe, dass dies für Sie arbeiten wird.

NSArray *test = @[@[@1,@2,@3,@4], 
       @[@3,@5,@6,@7]]; 

NSLog(@"Test array: %@", test); 
NSLog(@"Test firstObject: %@", [test firstObject]); 
NSLog(@"Test lastObject : %@", [test lastObject]); 
NSLog(@"Test objectAtIndex :%@", [test objectAtIndex:0]); 
NSLog(@"Test objectAtIndex 2 :%@", test[0]);