小编cpt*_*1nd的帖子

在performBlockAndWait块中执行获取请求时,核心数据死锁

我遇到了Core Data无法解决的问题.我已经很难了解Core Data中的并发问题,因此我非常小心,只执行任何核心数据操作performBlock:performBlockAndWait:块.

这是我的代码:

/// Executes a fetch request with given parameters in context's block.
+ (NSArray *)executeFetchRequestWithEntityName:(NSString *)entityName
                                 predicate:(NSPredicate *)predicate
                                fetchLimit:(NSUInteger)fetchLimit
                            sortDescriptor:(NSSortDescriptor *)sortDescriptor
                                 inContext:(NSManagedObjectContext *)context{
    NSCAssert(entityName.length > 0,
          @"entityName parameter in executeFetchRequestWithEntityName:predicate:fetchLimit:sortDescriptor:inContext:\
          is invalid");

    __block NSArray * results = nil;

    NSPredicate * newPredicate = [CWFCoreDataUtilities currentUserPredicateInContext:context];
    if (predicate){
        newPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:@[newPredicate, predicate]];
    }

    [context performBlockAndWait:^{

        NSFetchRequest * request = [NSFetchRequest fetchRequestWithEntityName:entityName];
        request.fetchLimit = fetchLimit;
        request.predicate = newPredicate;
        if (sortDescriptor) {
            request.sortDescriptors = @[sortDescriptor];
        } …
Run Code Online (Sandbox Code Playgroud)

concurrency multithreading deadlock core-data ios

10
推荐指数
1
解决办法
2894
查看次数

标签 统计

concurrency ×1

core-data ×1

deadlock ×1

ios ×1

multithreading ×1