さて、私はデータベースクラスに取り組んでいて、例外を使用するように言われました. ただし、例外をできるだけ回避し、代わりに NSError を使用するために、Apple 開発者ガイドを読みました。( https://developer.apple.com/library/ios/#DOCUMENTATION/Cocoa/Conceptual/ObjectiveC/Chapters/ocExceptionHandling.html )
だから私は考えました:私は正しいアプローチを使用していますか? この場合、NSErrors を使用する必要がありますか?
+(long)insertTrack:(Track *)track Database:(Database *)db {
@try {
sqlite3_exec(db.dataBase, "BEGIN", 0, 0, 0); //Start transaction
const char *sqlTrack = "INSERT INTO ...";
if(sqlite3_prepare_v2(db.dataBase, sqlTrack, -1, &addTrackStatement, NULL) != SQLITE_OK) {
@throw [NSException exeption....]
}
//Bind variables
sqlite3_bind_text(...);
if(SQLITE_DONE != sqlite3_step(addTrackStatement)) {
@throw [NSException exeption....]
}
else {
long insertedTrack = sqlite3_last_insert_rowid(db.dataBase);
sqlite3_exec(db.dataBase, "COMMIT", 0, 0, 0); //End transaction
return insertedTrack;
}
}
@catch(NSException *exception) {
//Log the exception and ROLLBACK!
}
@finally {
sqlite3_clear_bindings(addTrackStatement);
sqlite3_reset(addTrackStatement);
sqlite3_finalize(addTrackStatement);
}
}
もう一度質問です。戻り値を使用して、SQL ステートメントの準備または実行で問題が発生したことを示す必要がありますか? 今のように NSError を使うべきですか、それとも Exception を使うべきですか?