ios - 比较 Obj-C 中的对象,为什么它们不匹配?

标签 ios objective-c

赏金通知

您好!我开始悬赏这个问题,因为人们不会阅读整个问题,也不会试图理解问题的根源。或者,不知道这里发生了什么。需要更详细的方法。谢谢!

结束

当我用自定义任务调用 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。

enter image description here

enter image description here

enter image description here

编辑:

似乎是与 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/

相关文章:

objective-c - 为什么 [uiimagePickerController 允许编辑 :YES] substantially reduce the photo resolution from the camera?

c# - 如何在 Monotouch 中绑定(bind) NSObject<EAAccessoryDe​​legate>?

ios - UIBezierPath 简单矩形

ios - AVAssetWriter startSessionAtSourceTime 不接受 CMTIme 值

iphone - 如何检查NSTimer是否已经自动失效?

iphone - 适用于网站的 iOS native 客户端应用程序

iphone - 如何在后台iphone中定期调用webservice?

ios - NSString、NSMutableString 内存

ios - UITableView 在每个单元格中显示数组中的最后一项

ios - SVProgressHUD 与 CocoaPods 不同版本