使用NSURLSession时无法调用didReceiveData

时间:2016-02-06 12:04:53

标签: ios objective-c react-native

我正在从这个React Native模块Android Stacked Bars Chart中获取一些代码。我正在尝试使用NSURLConnection(已弃用)更新它以使用NSURLSession并报告上传的进度。

我能够将代码从NSURLConnection切换到NSURLSession并没有太大的困难,但我正在努力调用didReceiveData委托。为什么不调用didReceiveData委托?

这是我修改过的FileUpload.m

    //Correct
    public string Class3
    {
        get; set;
    }
    //Wrong
    public string Class4
    {
        get { return Class4; }
        set { Class4 = value; }
    }

1 个答案:

答案 0 :(得分:2)

对于使用NSURLSession的委托模式,我认为您应该通过以下方式创建NSURLSession:

[NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]
                              delegate:self
                         delegateQueue:[NSOperationQueue mainQueue]];

但不是:

[NSURLSession sharedSession];

另外我注意到您的NSURLSessionDataDelegate,NSURLSessionDelegate,NSURLSessionTaskDelegate与UIViewController一起使用;但是,您的NSURLSession和委托方法是在FileUpload.m中实现的。尝试编辑此行:

@interface FileUpload : NSObject <RCTBridgeModule>

为:

@interface FileUpload : NSObject <RCTBridgeModule, NSURLSessionDataDelegate, NSURLSessionDelegate, NSURLSessionTaskDelegate>

然后创建NSURLSessionDataTask而不使用完成处理程序:

NSURLSessionDataTask *task = [session dataTaskWithRequest:req];

看看是否有任何区别。