我为我的项目定义了一个核心数据并实现了一个名为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 确定每个单元格的内容。因此,我需要为 getAllRecords 设置与 tableView 中相同的值,否则它会崩溃。
另一种建议的解决方案在内存和数据库中有两个来源似乎也不可能,我如何为一个 TableView 提供两个来源?
更新 2:
我有一个令人尴尬的疏忽。从上下文中删除记录是不够的。我还必须从数组中删除它。
[allRecords removeObjectIdenticalTo:record];
因此我收回它。Martin 的解决方案非常完美。但是,我仍然很想知道 UITableView 是否确实可以按照其他解决方案中的建议从两个源(数据库/内存)驱动。谢谢