Ratschläge, wie Sie zu fangen "Versuch zum einfügen von null-Objekt" von einem Gerät benötigt

Hier ist die situation:
Hockeyapp und testflight ab und beschweren sich dann über mich

", die versuchen, insert-null-Objekt"

in veränderlichen Wörterbücher/arrays. Ich weiß das richtige ist zu prüfen, für null die ganze Zeit, und ich weiß, wenn es Sinn macht.. Unsere Tester können nicht fangen diese Abstürze, aber AppStore-Nutzer natürlich.

Meine Vermutung ist, dass manchmal server gibt NSNulls, wenn es nicht sollte.
Also nicht einfügen-Prüfungen für nil überall in dem riesigen Projekt meine Idee war, erstellen Sie ein separates Ziel für die Tester und Methode swizzling für die collection-Klassen.
Sagen, ich werde ersetzen insertObject:atIndex mit meinem swizzled_insertObject:atIndex, wo, wenn das Objekt tatsächlich null I log/show einen aussagekräftigen Bericht, bevor es abstürzt.

Die Sache ist die ich nicht nutzen kann swizzling für __NSPlaceholderDictionary oder __NSArrayM (nur da kann ich nicht eine Kategorie auf private Klassen) und das macht mich traurig.

Also im Grunde Frage ich ja um Rat, wie fangen diese fiesen selten Abstürze.
Eine Lösung habe ich im Hinterkopf, ist die Verwendung von try-catch-Blöcke, ich weiß, Sie sind teuer in Objective-c, also würde ich Sie nicht verwenden in der Produktion nur für Tester. Aber Methoden, umgeben von try-catche-s, umgeben von #ifdef-#endif-s löscht alle readableness der code. Also ich bin auf der Suche nach einer eleganteren Lösung.
Danke.

Update: der stack-traces sind unfortunaely nicht sehr aussagekräftig, hier ist was ich bekommen

Exception Type:  SIGABRT
Exception Codes: #0 at 0x3a378350
Crashed Thread:  0

Application Specific Information:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[2]'

Last Exception Backtrace:
0   CoreFoundation                      0x321522a3 <redacted> + 163
1   libobjc.A.dylib                     0x39e7a97f _objc_exception_throw + 31
2   CoreFoundation                      0x320a355f <redacted> + 135
3   CoreFoundation                      0x320da0d3 <redacted> + 51
....
Sie nicht brauchen, um zu überprüfen, für nil überall. Der stack-traces werden sollten, sagen Ihnen genau, Wann welche Zeile code in Ihrer app das problem verursacht. Fix ist, dass spezifische code. Aber nicht nur der check für nil. Ermitteln Sie, warum Sie immer nil in den ersten Platz.
Das ist das problem - ich kann nicht feststellen, warum und wo, ich bin immer null. und der stack-traces sind nicht immer deskriptiven alles, was ich bekommen ist zum Beispiel: erminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert null-Objekt aus dem Objekte[2]'
Eine andere Sache: Sie scheinen verwirrend sein nil mit NSNull. NSNull ist ein Objekt; es ist Häufig als Platzhalter verwendet.
Dies ist Andreas von HockeyApp. <redacted> ist in stack-traces, denn iOS stellt Sie dort. Für alle öffentlichen (nicht-NDA) iOS-releases, HockeyApp ersetzt diese mit dem richtigen system calls. Der Grund, warum <redacted> erscheint in der ersten Stelle ist da die iOS-interne Optimierungen. Jedenfalls, wenn Sie Hilfe benötigen, sollten Sie poste den kompletten stack-trace, anstatt nur die ersten 4 Zeilen! Was iTunes Connect zeigt und was nicht erfahren Sie hier: stackoverflow.com/questions/15588072/...
Nur um sicher zu gehen, den stack-trace HockeyApp Berichte ist in der Nähe von identisch, was iOS, schreibt in seinem crash-Berichte. Es ist nichts falsch mit den berichten per se. Und wie bereits in meinem vorherigen Kommentar hier, HockeyApp ist nichts zu tun, albern entweder.

InformationsquelleAutor dariaa | 2013-06-27

Schreibe einen Kommentar