赏金通知
您好!我开始悬赏这个问题,因为人们不会阅读整个问题,也不会试图理解问题的根源。或者,不知道这里发生了什么。需要更详细的方法。谢谢!
结束
当我用自定义任务调用 NSURLSession 时 - 我将这些任务存储在字典中。当我收到委托(delegate)回电时,我需要找到它是关于哪个任务的。这是我的做法:
- (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。
编辑:
似乎是与 PROXY 相关的问题。 iOS 当我创建和存储 NSURLSession 时实际上返回 NSProxy。 NSUURLSessionTask 也一样。
这都是新事物吗?根据您在本地人中看到的情况,我如何比较这些对象?我需要获取 task._taskDelegate
但它没有公开..
最佳答案
尚不清楚您如何将项目添加到操作
。
这一行具有误导性:
for (NSString *key in self.operations)
因为在您的调试跟踪中,您的 key 似乎实际上是 operations
中的 NSNumbers。
为什么不尝试使用 taskIdentifier .它应该唯一标识 session 中的任务。
- (NSInteger)getOperationIdentifierForTask:(NSURLSessionTask*)task
{
NSNumber * value = self.operations[@(task.taskIdentifier)];
if( value == nil )
return 0;
return value.integerValue;
}
关于ios - 比较 Obj-C 中的对象,为什么它们不匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32660581/