[AVPlaybackItem fpItem]: сообщение отправлено на освобожденный экземпляр - PullRequest
0 голосов
/ 17 ноября 2010

Я играю фильм с MPMoviePlayerController.Позже приложение «перезапускается» (имеется в виду псевдосброс, при котором все viewControllers удаляются и пользователь возвращается на главный экран), и тот же фильм воспроизводится снова.

Это приводит к сбою вiOS 3.2.2 на iPad:

[AVPlaybackItem fpItem]: сообщение отправлено на освобожденный экземпляр

Понятия не имею, откуда это.Кажется, что-то личное.Кто-нибудь испытывал и, возможно, решал такую ​​же проблему?

Трассировка стека для этого конкретного адреса:

(gdb) info malloc 0x11471400
Alloc: Block address: 0x11471400 length: 76
Stack - pthread: 0xa0630500 number of frames: 34
    0: 0x9534e0c3 in malloc_zone_calloc
    1: 0x9534e01a in calloc
    2: 0x343edc9 in _internal_class_createInstanceFromZone
    3: 0x344b5c9 in _class_createInstanceFromZone
    4: 0x344b5ef in class_createInstance
    5: 0x3326b57 in +[NSObject allocWithZone:]
    6: 0x332583a in +[NSObject alloc]
    7: 0x536ab67 in -[AVPlaybackQueue queueItemWasAddedNotification:]
    8: 0x27f586 in _nsnote_callback
    9: 0x328d165 in _CFXNotificationPostNotification
   10: 0x2762ca in -[NSNotificationCenter postNotificationName:object:userInfo:]
   11: 0x5354982 in -[AVQueue itemWasAdded:atIndex:]
   12: 0x5354801 in -[AVQueue insertItem:atIndex:error:]
   13: 0x53549d8 in -[AVQueue appendItem:error:]
   14: 0x535c3be in -[AVController addNextFeederItemToQueue]
   15: 0x535b06f in -[AVController checkQueueSpace]
   16: 0x5359f46 in -[AVController setQueue:]
   17: 0x535ac62 in -[AVController setQueueFeeder:withIndex:]
   18: 0x30eee20 in -[MPAVController reloadFeederWithStartIndex:]
   19: 0x30deed7 in -[MPMoviePlayerControllerNew _prepareToPlayWithStartIndex:]
   20: 0x30dc686 in -[MPMoviePlayerControllerNew prepareToPlay]
   21: 0x27f586 in _nsnote_callback
   22: 0x328d165 in _CFXNotificationPostNotification
   23: 0x2762ca in -[NSNotificationCenter postNotificationName:object:userInfo:]
   24: 0x281238 in -[NSNotificationCenter postNotificationName:object:]
   25: 0x31596d1 in -[MPMovie _determineMediaType]
   26: 0x291b87 in __NSFireDelayedPerform
   27: 0x32747dc in CFRunLoopRunSpecific
   28: 0x32738a8 in CFRunLoopRunInMode
   29: 0x3aaf89d in GSEventRunModal
   30: 0x3aaf962 in GSEventRun
   31: 0x52b372 in UIApplicationMain
   32: 0x27be in main at /blablabla 
   33: 0x2735 in start

Ответы [ 2 ]

1 голос
/ 01 марта 2012

может быть, вы звоните подготовить, чтобы играть более одного раза для одного и того же фильма, и я думаю, что это проблема, и она существует для всех ios до 4.3, я думаю (не уверен, хотя), так что просто пометьте фильм, если была вызвана подготовка к игре один раз, тогда не вспоминайте его для того же файла

1 голос
/ 17 ноября 2010

Звучит так, будто вы звоните release больше, чем звоните retain.

Не содержит ли сообщение об ошибке шестнадцатеричный адрес в конце?Если это так, выполните следующие действия, чтобы выследить нарушающий объект:

  1. Перейдите в Project-> Edit Active Executable (или нажмите Command-Option-X).Выберите вкладку аргументов.Установите переменные среды, как показано ниже: alt text

  2. Запустите программу и повторите шаги, необходимые для воспроизведения ошибки.

  3. Скопируйте шестнадцатеричный адрес вконец ошибки.Затем в консоли отладчика введите следующую команду: (gdb) info malloc-history <paste-address-here>.
  4. Проверьте выходные данные, чтобы выследить объект-нарушитель.

PS Не забудьте отключить переменные среды, когдавсе готово.

...