gpt4 book ai didi

ios - 如何在 Core Data 中自定义保存?

转载 作者:行者123 更新时间:2023-11-29 10:53:51 25 4
gpt4 key购买 nike

我已经为我的项目定义了一个 Core Data 并实现了一个名为 isRealEntry 的 ENtity:attribute。

@interface FTRecord : NSManagedObject

@property (nonatomic) NSTimeInterval lastUpdated;
@property (nonatomic) BOOL isRealEntry;

@end

现在,当我保存上下文时 (NSManagedObjectContext *context;)

NSError *error = nil;
BOOL successful = [context save:&error];

我只想保存那些具有真实 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];

所以我收回了它。马丁的解决方案完美无缺。但是,我仍然很想知道 UITableView 是否确实可以像其他解决方案中所建议的那样从两个来源(数据库/内存)驱动。谢谢

最佳答案

我以前不得不做类似的事情,我采用的方法是为我要保留的项目提供一个单独的托管对象上下文,为仅保留在内存中的项目提供另一个。

我通过拥有一个单独的持久存储协调器以及一个单独的仅在内存中的托管对象上下文来解决这个问题,因此当项目保存到其中时,它们不会像您描述的那样持久保存到数据库中实物。

您可以像这样创建一个内存持久存储协调器:

inMemoryPersistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];

[inMemoryPersistentStoreCoordinator addPersistentStoreWithType:NSInMemoryStoreType 配置:无 URL:无 选项:无 错误:&error];

如果您想将非真实项目更改为真实项目,您可以将它们复制到其他托管对象上下文中,这将在项目保存时将其持久保存到数据库中。

这里明显的问题是搜索是在单个托管对象上下文中完成的,因此如果您希望搜索持久化对象和内存中的对象,那么您需要按照 Arkadiusz 在他的回答中建议的内容做更多的事情。

关于ios - 如何在 Core Data 中自定义保存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19323482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com