我試圖通過一個方法將委託傳遞給另一個對象。它工作簡單,但後來變爲空。我想我已經弄清楚是什麼導致了它,但沒有如何解決它。停止複製變量的塊
因此,iOS中的塊會自動複製所引用的任何變量。我有一個用戶傳入委託對象的方法。爲受管對象上下文執行一個塊,然後在委託傳遞的地方發出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發佈,因爲它是一個副本,而不是原來的。
我怎樣才能解決這個
也許你可以接受這個答案,刪除問題或提供另一個解釋答案:) – Tieme
啊對不起!我打算接受這個答案,但最初這個問題並不讓我感到太新。現在完成:) – PaReeOhNos
會發生很多:) – Tieme