【发布时间】:2015-09-18 20:33:30
【问题描述】:
赏金通知
你好!我开始对这个问题给予赏金,因为人们不会阅读整个问题,也不会试图了解问题的根源。或者,不知道这里发生了什么。需要更详细的方法。谢谢!
结束
当我使用自定义任务调用 NSURLSession 时 - 我将这些任务存储在字典中。当我收到委托回电时,我需要找到它与哪个任务有关。这是我的做法:
- (NSInteger)getOperationIdentifierForTask:(NSURLSessionTask*)task
{
for (NSString *key in self.operations)
{
HttpTaskOperation *value = [self.operations objectForKey:key];
if (value.task == task) return [key integerValue]; //**********
}
return 0;
}
它以前对我有用(肯定是 iOS7),但现在这种比较从未成功。我还从当地人那里截取了屏幕截图,请参阅突出显示的对象 ID。是的,我不是 C 开发人员,所以它可能与问题有关 :) 我认为这是由于指针问题..
当带有 //***** 的代码行执行时 - 我没有得到匹配。这个函数总是返回 0。
编辑:
似乎与代理有关的问题。 iOS 在我创建和存储 NSURLSession 时实际上返回 NSProxy。 NSUURLSessionTask 也一样。
这一切都是新事物吗?鉴于您在当地人看到的情况,我如何比较这些对象?我需要得到task._taskDelegate,但它没有暴露出来..
【问题讨论】:
-
你不是在比较_task(0x787346a0)和task(0x78753180)吗? _task.taskDelegate 与 _task 不同
-
你不是在比较
taskDelegate;您正在比较task本身。试试if (value.task.taskDelegate == task) {...}。 -
没有足够的上下文来回答这个问题。您有一个指针
task被传递给该方法,以及一个预期包含相同指针的数组。然而,如果不知道指针来自哪里,或者数组是如何填充的,就无法知道这种期望是否合理。 -
查看我的编辑,我在运行时显示比较线的本地人和 sn-ps - 它们(左侧和右侧)都显示相同的 id
-
局部变量的截图和其他两张截图有矛盾。具体来说,最后一个屏幕截图将
value.task显示为0x78690480。但是在局部变量中,您突出显示了value.task.taskDelegate。
标签: ios objective-c