NSURLSession成员引用类型struct objc_class是一个指针

时间:2016-12-14 19:13:19

标签: ios objective-c iphone xcode nsurlsession

我正在尝试实现单例来管理NSURLSession请求。这是我的代码:

标题文件:

@interface httpRequest : NSObject

@property (strong,nonatomic) NSURLSession *session;

+(httpRequest*)request;

实施文件(.m):

+(httpRequest*)request
{
    static httpRequest *shareObject = nil;
    static dispatch_once_t onceToken;
    dispatch_once ( &onceToken, ^{
        shareObject = [[self alloc] init];
        self.session = [NSURLSession sharedSession];
    });
    return shareObject;
}

但是在这一行:

self.session = [NSURLSession sharedSession];

我收到此错误:“NSURLSession成员引用类型struct objc_class是您指定使用的指针 - >”

enter image description here 为什么我会收到错误?你们中的任何人都知道解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

通常的方法是使用init方法

+(httpRequest*)request
{
    static httpRequest *shareObject = nil;
    static dispatch_once_t onceToken;
    dispatch_once ( &onceToken, ^{
        shareObject = [[self alloc] init];
    });
    return shareObject;
}


- (id)init
{
    self = [super init];
    if (self) {
        self.session = [NSURLSession sharedSession];
       }
    }
    return self;
}

但是因为sharedObject实际上是self,所以这也应该有用

+(httpRequest*)request
{
    static httpRequest *shareObject = nil;
    static dispatch_once_t onceToken;
    dispatch_once ( &onceToken, ^{
        shareObject = [[self alloc] init];
        shareObject.session = [NSURLSession sharedSession];
    });
    return shareObject;
}

答案 1 :(得分:1)

在类方法(以C#开头的方法)中,Table1: column1, column2 Table2: column3, column4 引用类,而不是实例。我认为你打算+。就个人而言,我会将self的设置移至shareObject.session方法(在这种情况下,您将使用session语法)。

或者,在Objective-C中,您现在可以定义init属性(专为Swift互操作性而设计)。但是,既然你只有一个self.session,那就太过分了。