プロジェクトの Core Data を定義し、 という ENtity:attribute を実装しましたisRealEntry
。
@interface FTRecord : NSManagedObject
@property (nonatomic) NSTimeInterval lastUpdated;
@property (nonatomic) BOOL isRealEntry;
@end
コンテキストを保存すると ( NSManagedObjectContext *context;
)
NSError *error = nil;
BOOL successful = [context save:&error];
true を持つエンティティのみを保存したいと思いますisRealEntry
。そうでない場合、エントリは無視されるか元に戻されます。
どうすればこれを達成できますか?
アップデート:
最初は、Martin のソリューションが非常に有望であることがわかりました。ただし、バックグラウンドに入ったときにデータを保存すると、非常に厄介な副作用が発生します。
- (void)applicationDidEnterBackground:(UIApplication *)application
{
[[FTRecordStore sharedStore] saveChanges];
}
アプリを再開すると、以前に削除されたすべてのレコードが実際にはなくなっていませんが、削除するようにフラグが付けられています。配列にはまだそれらのすべてが含まれているようです (私の場合はリアルまたは非リアル)。セルは完全に狂ってしまい、すべてのレコードで空が表示されます。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
FTRecord *record = [[[FTRecordStore sharedStore] getAllRecords] objectAtIndex:[indexPath row]];
FTRecordCellView *cell = [tableView dequeueReusableCellWithIdentifier:@"FTRecordCellView"];
[[cell notesLabel] setText:[record notes]];
return cell;
}
これを解決する方法がわかりません。私の店はシングルトンです。getAllRecords は、各セルのコンテンツの上を決定します。したがって、tableView と同じ値を getAllRecords に設定する必要があります。そうしないとクラッシュします。
メモリ内とデータベース内の 2 つのソースを使用する他の提案されたソリューションも可能ではないようです。1 つの TableView に 2 つのソースを供給するにはどうすればよいですか?
更新 2:
恥ずかしい見落としがありました。コンテキストからレコードを削除するだけでは不十分です。また、配列から削除する必要がありました。
[allRecords removeObjectIdenticalTo:record];
したがって、私はそれを取り戻します。マーティンのソリューションは完璧に機能します。ただし、他のソリューションで提案されているように、UITableView を実際に 2 つのソース (db/memory) から駆動できるかどうかを知りたいと思っています。ありがとう