0

所以这里就是我试图做我有BAD_ACCESS错误 - 是我的内存分配了解正确

@implementation someHelper 

+(BOOL) GetInfo:(NSData **)info1, (NSString**) info2 
{ 
    __block _Bool out = NO; 

    //do stuff to get input 

    [[Bool result] startSession:input callsBack:^(Abc obj, Bool status) 
    { 
     if(status) 
     { 
      *info1 = [obj.Data1 subdataWithRange:NSMakeRange(0,2); 
      *info2 = obj.string1; 
      out = true; 
     } 
     else 
     out = false; 
    }]; 
    return out 
} 

呼叫看起来像

NSString *a; 
NSData *b; 
output = [someHelper GetInfo:(NSData **)&a (NSString **)&b]; 

我想的东西我是缺少在这里是info1info2的实际内存分配。我对Obj C很陌生,我不清楚我需要做什么才能正确分配。

当我试着使用

NSMutableData *info1 = [NSMutableData dataWithCapacity: 2]; 
*info1 = [obj.Data1 subdataWithRange:NSMakeRange(0,2); 

我得到 Assigning to NSMutableData from incompatible type NSData

有人可以帮助我更好地理解这一点,以及我如何解决问题?

回答

0

更可能是startSession:callsBack:异步立即返回的方法。在回调块中,您应该将字符串和数据传递给对更新值感兴趣的任何内容。

鉴于Objective-C标准与命名约定和编码模式相距甚远,我建议还要回顾一下如何使用Objective-C。

+0

除了NSError以外,还有哪些其他基础类型在典型代码中取消了引用?几乎没有。我不明白为什么会有任何理由在这里通过引用传递NSData。 – stevesliva

+0

@stevesliva毫无理由,它根本不会起作用。由于'startSession:callsBack:'(很有可能)是异步的,到块执行时,'GetInfo'已经返回并尝试设置那些inout参数是毫无意义的。 – bbum