2016-02-10 2 views
0

Как я могу изменить эту строку кода [NgnAVSession releaseSession: &audioSession]; так, что я больше не получаю эту ошибку:Objective-C Passing адрес нелокального объекта __autoreleasing параметр

Passing address of non-local object to __autoreleasing parameter for write-back

это весь метод

- (void)viewWillDisappear:(BOOL)animated 
{ 
    [NgnAVSession releaseSession: &audioSession]; 
    [UIDevice currentDevice].proximityMonitoringEnabled = NO; 
} 

Вот декларация releaseSession

Заголовок

+(void) releaseSession: (NgnAVSession**) session; 

Реализация

+(void) releaseSession: (NgnAVSession**) session{ 
     @synchronized (kSessions){ 
      if (session && *session){ 
       if([(*session) retainCount] == 1){ 
        [kSessions removeObjectForKey:[*session getIdAsNumber]]; 
       } 
       else { 
        [(*session) release]; 
       } 
       *session = nil; 
      } 
     } 
    } 
+0

Я искал некоторые коды, которые имеют ту же ошибку, что и моя, но я не знаю, как редактировать свой код, как они. – theFool

+0

Что такое объявление 'releaseSession:'? – Cristik

+0

Я обновил код – theFool

ответ

1

Вы используете очень старую библиотеку. Попробуйте получить более новую версию.

Затем прочитайте, как использовать какао NSError *. Вам нужно действительно, потому что иначе вы не можете понять, что происходит.

Короткий рассказ: компилятор предполагает, что вы передаете адрес переменной автореализатора. При необходимости он может превратить локальную переменную в автореализационную. Это не может быть сделано с нелокальной переменной.

Что эти парни делают, это просто неправильно, неправильно, неправильно, неправильно, неправильно. Если они хотят отслеживать все сеансы без учета ссылок, самый простой способ - создать объект-оболочку, содержащий слабую ссылку, поместить объекты-обертки в массив, а в методе dealloc вы можете удалить объект из массива.

Я предлагаю вам отбросить их освобождение и сделать то, что я сказал раньше.

+0

Хотел бы я получить более новую версию, но они хотят, чтобы я использовал это. Я постараюсь следовать тому, что вы сказали, но сначала мне нужно переварить его. Я пока не умею программировать на iOS, так что это может быть сложно для меня, я думаю. – theFool