Created attachment 19801 [details]
A Sample project, its screenshot and its log
Xamarin provides users the following lambda style AddObserver() of KVO.
Disposable = PlayerItem.AddObserver("status", NSKeyValueObservingOptions.New, (obj) =>
I think it causes crash when it is disposed.
Run the attached sample project and do the following steps:
1. Tap “Hello World, Click Me!” button and show a scene of PlayerViewController
2. Tap “Dismiss” button and dismiss the scene
After 2nd step, the app crashes with this error message:
Foundation.MonoTouchException: Objective-C exception thrown. Name: NSInternalInconsistencyException Reason: An instance 0x608000019a80 of class AVPlayerItem was deallocated while key value observers were still registered with it. Current observation info: <NSKeyValueObservationInfo 0x61800023f500> (
<NSKeyValueObservance 0x618000242160: Observer: 0x61800023d780, Key path: status, Options: <New: YES, Old: NO, Prior: NO> Context: 0x61800023d780, Property: 0x618000242190>
If you use the way of normal AddObserver, this crash doesn’t happen.
In my sample project, you can see the differences of them with switching the value of the property “UsesLambdaWay” of PlayerViewController to “false" from “true”.
I attached the animated gif of the screenshot and its full log.
Check it as well ;)
=== Xamarin Studio Professional ===
Version 6.2 (build 1809)
Installation UUID: 06c49475-4597-4e61-8ea9-83db8732bbe1
Mono 4.8.0 (mono-4.8.0-branch/ba7f169) (64-bit)
GTK+ 2.24.23 (Raleigh theme)
Package version: 408000483
=== NuGet ===
=== Xamarin.Profiler ===
Location: /Applications/Xamarin Profiler.app/Contents/MacOS/Xamarin Profiler
=== Apple Developer Tools ===
Xcode 8.2.1 (11766.1)
=== Xamarin.iOS ===
Version: 10.4.0.114 (Visual Studio Professional)
Build date: 2017-02-03 16:04:59-0500
=== Xamarin.Android ===
Version: 126.96.36.199 (Visual Studio Professional)
Android SDK: Not found
=== Xamarin Android Player ===
=== Xamarin.Mac ===
Version: 188.8.131.524 (Visual Studio Professional)
=== Xamarin Inspector ===
Build date: Tue, 15 Nov 2016 21:13:59 GMT
=== Build Information ===
Release ID: 602001809
Git revision: bd75dae9aa2e6041309bc6a4f6140cc099ea2e98
Build date: 2017-02-03 15:04:22-05
Xamarin addins: bf31ec767f2a60b3e34647baf33798b26c9336aa
Build lane: monodevelop-lion-cycle9
=== Operating System ===
Mac OS X 10.11.6
Darwin abc.local 15.6.0 Darwin Kernel Version 15.6.0
Mon Jan 9 23:07:29 PST 2017
Looks like you're right, it crashes when you try to dispose of it without first removing the observer, and there doesn't appear to be a way to remove an observer that was added using a lambda expression.