我正在尝试通过方法将委托传递给另一个对象。它短暂工作,但随后变为空。我想我已经弄清楚是什么原因造成的,但不知道如何解决它。
因此 iOS 中的 Blocks 会自动复制所有引用的变量。我有一个方法,用户传入一个委托对象。为托管对象上下文执行一个块,该上下文又发出一个 Web 请求,其中传递了委托。我认为正在发生的事情是,该块正在制作委托对象的副本,并将其传递给请求,但随后该块完成执行并释放了委托。
有没有一种方法可以简单地传递原始委托对象而不是复制它的块?
NSManagedObjectContext *context = [[MPCoreDataManager sharedInstance] managedObjectContext];
[context performBlock:^{
    __block NSError *error;
    NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:NSStringFromClass([self class])];
    [request setSortDescriptors:@[[[NSSortDescriptor alloc] initWithKey:key ascending:asc selector:@selector(caseInsensitiveCompare:)]]];
    NSFetchedResultsController *controller = [[NSFetchedResultsController alloc] initWithFetchRequest:request
                                                                                 managedObjectContext:context
                                                                                   sectionNameKeyPath:keyPath
                                                                                            cacheName:nil];
    [controller performFetch:&error];
    if (!controller.fetchedObjects || controller.fetchedObjects.count == 0) {
        // Nothing found or an error, query the server instead
                NSString *url = [NSString stringWithFormat:@"%@%@", kMP_BASE_API_URL, [self baseURL]];
        MPRequest *objRequest = [MPRequest requestWithURL:url];
          objRequest.delegate = delegate;
        [objRequest setRequestMethod:@"GET"];
        [MPUser signRequest:objRequest];
        [objRequest submit:^(MPResponse *resp, NSError *err) {
            if (err) {
                block(nil, err);
            } else {
                NSArray *objects = [self createListWithResponse:resp];
                         objects = [MPModel saveAllLocally:objects forEntityName:NSStringFromClass([self class])];
                [controller performFetch:&error];
                block(controller, nil);
            }
        }];
    } else {
        // Great, we found something :)
        block (controller, nil);
    }
}];
这是我正在使用的代码。如您所见,委托在这里使用objRequest.delegate = delegate;但由 ARC 发布,因为它是副本而不是原件。
我怎样才能解决这个问题