2017-05-09 1 views
0

Ich habe ein NSDictionary, namens "thisList", und ich muss den Wert seines Schlüssels "list_collection" erhalten.Kann nicht Wert von NSSingleEntryDictionary

Xcode zeigt an, dass der Wert ein "NSSingleEntryDictionary" ist.

Der Wert selbst enthält ein Array mit einem weiteren Wörterbuch.

Bitte nehmen Sie sich einen Blick auf den Screenshot: enter image description here

Nun, egal, was ich versuche (ObjectForKey/ValueForKey) oder was auch immer Art von Objekt I Initialize (NSArray/NSMutableArray/NSDictionary/NSMutableDictionary) I am Ende mit ein Nullwert.

Offenbar vermisse ich einige wesentliche Kenntnisse darüber, wie man damit umgeht.

Meine Frage: Wie initialisiere ich ein Objekt mit dem Wert des Schlüssels "list_collection". Hier

ist eine (teilweise) Dump des json:

Printing description of thisList: 
{ 
    archived = 0; 
    "chapter_part" = ""; 
    "chapter_title" = ""; 
    comment = ""; 
    "cover_id" = "<null>"; 
    "created_at" = "2017-01-06T12:59:04.000+01:00"; 
    "date_created" = "06 January 2017"; 
    deleted = 0; 
    id = 141384502; 
    isMyList = 1; 
    keywords =  (
    ); 
    "list_collection" =  { 
     lists =   (
         { 
       "speech_locale" = EN; 
       subject = engels; 
       words =     (
             { 
         word = attitude; 
        }, 

Die mir logischste Ansatz wäre:

NSDictionary * myDic = [thisList objectForKey:@"list_collection"]; 

Anmerkung: Ich habe nicht explizit 'myDic' initialisieren hier .

Um die Dinge in Zusammenhang zu bringen, hier ist mein Code:

NSString * hlists = [json objectForKey:@"lists"]; 
    NSData* data = [hlists dataUsingEncoding:NSUTF8StringEncoding]; 
    NSArray *wrtsLists = [NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonParsingError]; 
    Lists = [[NSMutableArray alloc]init]; 
    for (NSDictionary *thisList in wrtsLists){ 
     WordList* theList = [[WordList alloc]init]; 
     theList.title = [thisList valueForKey:@"title"]; 
     [Lists addObject:theList]; 
     NSDictionary *myDic = thisList[@"list_collection"]; 
     >>>>this is where I put a breakpoint. myDic is nil here 
    } 

Vielen Dank für Ihre Einsichten.

+2

Können Sie Code und JSON-Daten veröffentlichen? damit wir Ihnen in Ihrem Problem helfen können. – CodeChanger

+0

Es spielt keine Rolle, für welchen Objekttyp Sie Ihre Variable deklarieren, es wird nicht "Null" sein, wenn der Schlüssel korrekt ist. Ein Typ-Mismatch kann (wird) später zu einem Absturz führen, aber es wird nicht zum Wert nil. Versuchen Sie, die Konsole zu verwenden und geben Sie "po ThisList.allKeys" ein und sehen Sie, ob Sie den Schlüssel richtig buchstabieren – GreatWiz

+0

Gemäß dem Screenshot soll Ihr * logischster Ansatz * funktionieren. Allerdings würde ich Schlüsselabonnements wie 'thisList [@" list_collection "] bevorzugen' – vadian

Antwort

1

Sie können einfach aus "thisList" "list_collection" Array erhalten durch diesen Code mit

NSDictionary *myDic = thisList[@"list_collection"]; 
-1

Versuchen Sie, diese Hoffnung, es hilft Ihnen

NSDictionary *myDic = [thelist valueForKey:"list_collection"]; 
+0

Verwenden Sie 'valueForKey' nur, wenn Sie erklären können, warum Sie KVC explizit benötigen. – vadian

0

Am Ende habe ich herausgefunden, dass es war ein Xcode-Problem. Der Debug-Bereich hat die Werte meiner Objekte nicht korrekt angezeigt. Ich habe Xcode neu gestartet und die Dinge haben wie erwartet funktioniert. Ich habe dabei einige Stunden meines Lebens verloren. Aber ich habe viel gelernt, dank deiner guten Ratschläge.