开发者

[AVPlaybackItem fpItem]: message sent to deallocated instance

I play a movie with MPMoviePlayerController. Later, the app is "restarted" (meaning a pseudo-reset, where all viewControllers are removed and the user returns to the home screen), and the same movie is played again.

This leads to a crash in iOS 3.2.2 on the iPad:

[AVPlaybackItem fpItem]: message sent to deallocated instance

I have no idea where that comes from. Seems to be something private. Has anyone experienced and possibly solved the same problem?

The stack trace for that particular address:

(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 开发者_StackOverflow中文版GSEventRun
   31: 0x52b372 in UIApplicationMain
   32: 0x27be in main at /blablabla 
   33: 0x2735 in start


It sounds like you're calling release more than you are calling retain.

Does the error message not contain a hex address at the end? If it does, follow these steps to hunt down the offending object:

  1. Navigate to Project->Edit Active Executable (or press Command-Option-X). Choose the arguments tab. Set the environmental variables as shown below:

    [AVPlaybackItem fpItem]: message sent to deallocated instance

  2. Run the program and repeat the steps needed to reproduce the error.

  3. Copy the hex address at the end of the error. Then, in the debugger console type this command: (gdb) info malloc-history <paste-address-here>.
  4. Examine the output to hunt down the offending object.

P.S. Don't forget to disable the environmental variables when you're done.


maybe you call prepare to play more than once for the same movie and i think this is the problem and it exists to all ios prior to 4.3 i guess (not sure though) so just flag the movie if prepare to play was called once then don't recall it for the same file

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜