gpt4 book ai didi

objective-c - 在核心数据管理类中处置NSManagedObjectContexts

转载 作者:行者123 更新时间:2023-12-03 13:00:20 25 4
gpt4 key购买 nike

因此,我正在建立一个框架,以保存用于操纵核心数据数据库的所有代码。我最终遇到的问题是这个。

我有一个返回新项目的方法

- (NSManagedObject *)createItem;

一旦他们修改了该项目,就会调用
- (void)save;

这必须能够在多个线程中执行,因此我从我的方法返回的托管对象必须在一个线程内具有一致的NSManagedObjectContext。解决此问题的我的方法是创建一个NSMutableDictionary来保存对NSManagedObjectContexts的引用,方法是使用
[NSThread hash]

作为关键。这很好用。唯一的问题是,一旦线程完成,我将无法摆脱上下文。

有人对我如何发现它有任何想法吗?

这是我的托管对象上下文方法的代码
// Return Managed Object Context for Framework
- (NSManagedObjectContext *)managedObjectContext
{
// Get Thread Hash Value
NSThread * currentThread = [NSThread currentThread];
NSNumber * hashValue = [NSNumber numberWithUnsignedInteger:[currentThread hash]];

// Get Context From Thread Hash
NSManagedObjectContext * context = [self.managedObjectContexts objectForKey:hashValue];

// Check Context Exists
if (!context)
{
// Create Managed Object Context With Persistent Store Coordinator In Main Thread
NSPersistentStoreCoordinator * coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
context = [[NSManagedObjectContext alloc] init];
[context setPersistentStoreCoordinator:coordinator];
}

// Add Context To Available Contexts
[self.managedObjectContexts setObject:context forKey:hashValue];
}

// Return
return context;
}

最佳答案

查看使用每个threadDictionary上可用的NSThread的方法。这样,您可以轻松获取线程的MOC(或知道是否没有线程),然后将为您处理清除操作。

关于objective-c - 在核心数据管理类中处置NSManagedObjectContexts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22309163/

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