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]; 

Я думаю, что я здесь отсутствует - фактическое распределение памяти для info1 и info2. Я очень новичок в 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