【问题标题】:NSMutableData - unrecognized selector sent to instanceNSMutableData - 发送到实例的无法识别的选择器
【发布时间】:2023-03-28 23:20:01
【问题描述】:

我正在尝试从响应中获取数据。
我正在使用NSURLConnectionDelegateNSURLConnectionDataDelegate
该项目使用 ARC。

@interface MainMenu()

@property (nonatomic, unsafe_unretained) NSMutableData* wpData;

@end 


@implementation

-(void)sendRequest{

    NSURL* url = [[NSURL alloc] initWithString:@"http://smthing"];

    NSMutableURLRequest* request = [[NSMutableURLRequest alloc] init];


    NSString* reqBody = @"Block";

    NSData* reqData = [reqBody dataUsingEncoding:NSUTF8StringEncoding];

    [request setURL:url];
    [request setHTTPBody:reqData];
    [request setHTTPMethod:@"POST"];

    self.wpData = [NSMutableData data];
    NSURLConnection* conection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

    [conection start];
}

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {

//Here iI have [__NSMallocBlock__ appendData:]: unrecognized selector sent to instance 0x95f3fb0
        [self.wpData setLength:0];


}

@end

也许你能发现我的错误

谢谢:)

【问题讨论】:

    标签: ios objective-c unrecognized-selector nsmutabledata


    【解决方案1】:

    您的数据指针是unsafe_unretained 属性,

    @property (nonatomic, unsafe_unretained) NSMutableData* wpData;
    

    并且您正在为其分配一个自动释放的实例,

    self.wpData = [NSMutableData data]; //Returns autoreleased object
    

    由于您正在发出异步下载请求,因此您需要维护数据对象。 你永远不知道什么时候自动释放池会被刷新,而未保留的对象会超出范围。在这种情况下,您应该 retain 自动释放对象。将属性改为strong并分配数据对象,

    @property (nonatomic, strong) NSMutableData* wpData;
    
    //...
    
    self.wpData = [[NSMutableData alloc] init]; //Better practice
    

    希望有帮助!

    【讨论】:

      猜你喜欢
      • 2019-08-28
      • 2012-07-24
      相关资源
      最近更新 更多