2011-01-17 11 views
2

ich bekomme Web-Daten von. NET-Webserver mit NSMutableUrl Anfrage.NSInvalidArgumentException ', Grund:' - [__ NSPlaceholderDictionary initWithObjects: forKeys: Fehler

Ich erhalte die Daten mit Soap-Anfrage, nachdem ich in NSDirectory gespeichert habe, indem ich die Antwort mit NSXmlparsing analysiert habe.

mein Code

NSArray *keys = [NSArray arrayWithObjects:@"id", @"firstname", @"lastname",@"addr",@"state",@"country",@"email",@"phone", nil]; 
    directory = [NSDictionary dictionaryWithObjects:resultData forKeys:keys]; 

[[NSUserDefaults standardUserDefaults] setObject:directory forKey:@"dictionaryKey"]; 

Es funktioniert gut, aber wenn überhaupt, wenn ich falsch eingeben wird es Ausnahme wie diese.

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSPlaceholderDictionary initWithObjects:forKeys:]: number of objects (0) not equal to number of keys (8)' 

Ich erhalte Antwort vom Web-Server wie diese

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><GenericAndroidMethodResponse xmlns="Mortgage"><GenericAndroidMethodResult>&lt;NewDataSet /&gt;</GenericAndroidMethodResult></GenericAndroidMethodResponse></soap:Body></soap:Envelope> 

Und Anwendung beendet.

Aber wenn ich falsche Antwort bekam, wie kann ich erkennen, zu dieser Zeit muss ich eine Warnung anzeigen, aber nicht von der Anwendung beenden.

Wie kann ich das tun.

Ich denke meine Frage ist klar.

kann mir jeder pls helfen.

Vielen Dank im Voraus.

Antwort

3

Sie versuchen, ein Wörterbuch zu erstellen und übergeben es 8 Schlüssel (Ihre keys Variable), aber Sie übergeben nicht die gleiche Anzahl von Werten. Tatsächlich sagt Cocoa, dass Ihr resultData ein leeres Array ist (oder vielleicht sogar null). Sie müssen also Ihren Code mit etwas wie:

if ([resultData count] == 8) { 
    // Creating the dictionary will succeed. 
    directory = ... ; 
} else { 
    // Creating the dictionary will fail, handle or ignore that. 
} 
schützen
0

Angenommen, resultData ist ein NSArray, könnten Sie testen, ob [resultData count] == 8.

Verwandte Themen