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