2009-08-03 2 views
1

ich eine iPhone App entwickle mit Core Data und ahev bemerkt, dass ich Ausnahmen, wenn ich erwarten würde und Fehler, ist dies ein Beispiel:Core Data - für Fehler der Hoffnung, Ausnahmen immer

NSError *error; 

// exception here if edited attribute name todoText in modeller and generated new database with that new name in it(ie clearing the iphone), ie tring to access a field not in the database 

@try { 

    NSMutableArray *mutableFetchResults = [[todoListManagedObjectContext executeFetchRequest:request error:&error] mutableCopy]; 

    //seems like vars declaered inside a try is only known inside it, so process here 

    if (mutableFetchResults == nil) { // nil = error 

     // Handle the error. 

Wie zu sehen in die Kommentare Ich erhalte keinen Fehler beim Versuch, auf ein nicht existierendes Feld zuzugreifen .... warum nicht einfach das Fehlerrückgabesystem dafür verwenden?

Ich denke, meine Frage ist, was sind Fehler und Ausnahmen für, und muss ich wirklich für beide so testen?

Rgds PM

Antwort

3

Welche Ausnahme erhalten Sie? In Cocoa bedeuten Ausnahmen normalerweise Programmierfehler, so dass Sie vermuten, dass Sie einen Parameter übergeben, der nicht gültig ist. Der Versuch, auf ein Feld zuzugreifen, das nicht in der Datenbank vorhanden ist, scheint eine solche Situation zu sein; Es ist kein Fehler "etwas ist schief gelaufen", es ist ein Fehler "Sie haben etwas falsch gemacht".

+0

Danke Graham, danke für diese Info! Also, was könnte hier einen Fehler erzeugen, und ist das überhaupt auf dem iPhone wahrscheinlich? Oe was wäre eigentlich passiert? –

+0

Es besteht also kaum die Notwendigkeit, auf Ausnahmen zu testen, außer zu Debugging-Zwecken während der Entwicklung? –

+0

Im Wesentlichen besteht der Trick darin, bereit zu sein, Fehler zu behandeln, weil sie im Laufe Ihrer App schiefgehen könnten _. Ausnahmen sollten zur Entwicklungszeit aussortiert werden, da Sie in Bezug auf die API das Falsche tun. Keine Cocoa-API löst aus, um eine vernünftige Fehlerbedingung anzuzeigen. –