2011-08-15 13 views
0

私はいくつかの株価情報を持つアプリを持っており、それをCoreDataに保存しています。私は2つのエンティティStock(name)とDailyStockData(date、number)を持っています。私は各エンティティの2年間の情報を保存しています。その後、ユーザーはTableView内のいくつかのストック名を削除することができます。CoreDataからの削除はどのように高速ですか?

私の- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath この在庫とDailyStockDataカスケードを削除し、コンテキストを保存します。コードを保存するマイ

は問題がある。この

// Save the context. 
NSError *error = nil; 
if (![context save:&error]) 
{ 
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
    abort(); 
} 

次のようになります。速いユーザー削除銘柄 - 私のアプリがクラッシュ。デバイスが終了していないときに、前回のトランザクションの削除を保存してコールを再度保存するときに、その理由が「中止」コマンドであることを理解しています。

ここに2つの質問があります^) 1.このクラッシュを防ぐ方法はありますか? 2.コンテキスト保存エラーを処理するベストプラクティスは何ですか?私はちょうど打ち切るよりも何度も何度もそれを保存しようとすることができるかもしれません。

最も簡単な解決策は、コンテキストを「非常に」保存するための再設計アプリケーションです。たとえば、アプリケーションがビューを変更したときなど、すべての可能性を知りたいときなどです。

+0

実際のエラーテキストを投稿すると役立ちます。 –

+0

書籍の例は、開発者に失敗を警告するだけでよいので、中断します。あなたはリリースアプリで決して中止することはありません。代わりに、エラーをトラップし、ログに記録し、分析し、適切な処置をとる必要があります。 – TechZen

答えて

3

「保存」を頻繁に呼び出さないでください。パフォーマンスが悪いです。

「保存」メソッドを使用すると、CoreDataは実際に変更したデータをディスクに保存します。保存する必要のあるデータが多い場合は時間がかかります。

アプリが終了するか、背景が十分に良い間に一度だけ保存してください。

予期せずクラッシュするとデータが失われることが心配な場合は、ユーザーがしばらくの間データの変更をやめたりアプリケーションの編集ビューを終了したりすると「保存」を呼び出すことができます。あなたの決定に依存しますが、データが変更されるたびに保存しないでください。

+0

私は、小さな変更を加えたたびに文脈を保存するCoreDataに関するいくつかの本から、この習慣を形成しています。 – Sergnsk

0

私はCoreDataを使用してデータベースを作成しますが、シミュレータを使用してデータベースに情報を入れません。 Navicat liteを使ってデータベースに情報を入れます。データベース全体を削除するには、user/library/application support/iphone simulator // applications // documents /の下のsimulatorsフォルダから削除してください。これは、Uアプリケーションフォルダと同期していない限り、データベース全体を削除します。

0
  1. このクラッシュを防止する手段はありますか?

はい、abort()を削除してください。アボートは、エラーの記録、分析、または応答に時間を費やしたくない場合にのみ、マイナーなサンプルコードで使用されます。実際のコードでは決して使用しません。

  1. コンテキストがエラーを救うに対処するためのベストプラクティスは何ですか?

まず最初に行うには、あなたが実際に失敗しているものをいくつかのアイデアを持っているように、詳細にエラーを記録しています。

私は理由は私のデバイスは、以前の削除トランザクションのセーブ 終了しなかったときにコマンドを「中止」と、再びそれを保存するために呼び出すであることを理解しています。

そう思わない。人間のスピードで動作するUI駆動アクションは、ローカルコンピュータの操作を過負荷にすることはほとんど不可能です。 Core Dataに数百のオブジェクトを保存するにはわずか数ミリ秒かかりますが、UIで行を削除するには人が1秒以上かかることがあります。 UIが使用されている間にクラッシュが発生している場合、そのエラーは恐らくUIに関係していると考えられます。テーブルビューのセクション数とロー数が正しく更新されません。

推測しないでください。保存エラーをログに記録し、実際に何が起きているかを確認します。

+0

あなたは正しいです。私はクラッシュログの間違ったスレッドを見る。それは私のせいでした^)CoreDataではありませんでした)私はここで別の質問をしました - http://stackoverflow.com/questions/7083077/crash-when-calculate-data-and-draw-it-in-different-threads – Sergnsk

関連する問題