2012-02-11 4 views
2

ロード可能なバンドルとKVOに関する問題が発生しています。 KVOオブザーバがインスタンスにアタッチされているクラスは、NSBundleの-unloadメソッドで安全にアンロードできないようです。以前にアンロードされたバンドルのリロード時にKVO/KVCがクラッシュする

私は次のことをやっている:

for (int i = 0; i < 100; i++) 
{ 
    [bundle load]; 

    Class bundleClass = [bundle principalClass]; 

    [[[bundleClass alloc] init] release]; 

    [bundle unload]; 
} 

、バンドルの原則クラス-init方法、

[self addObserver: self 
      forKeyPath: @"name" 
       options: 0 
       context: nil]; 

    self.name = @"jim"; 

にループが時々二回目のラウンドでクラッシュ、反復回数を通じて取得時には30代目です。

このバックトレースでは常にEXC_BAD_ACCESS信号でクラッシュします。

#0 0x00007fff8a30deab in objc_msgSend() 
#1 0x00007fff8609d862 in NSKeyValueNotifyObserver() 
#2 0x00007fff860be99b in NSKeyValueDidChange() 
#3 0x00007fff8606b0fb in -[NSObject(NSKeyValueObserverNotification) didChangeValueForKey:]() 
#4 0x00000001007a4c2c in -[Bundle init] (self=0x101902130, _cmd=0x7fff8ea369b0) at /Users/joerick/Desktop/bundleTest/testbundle/Bundle.m:26 
#5 0x0000000100001731 in -[SIAppDelegate applicationDidFinishLaunching:] (self=0x100326a90, _cmd=0x7fff876e285f, aNotification=0x100131ea0) at /Users/joerick/Desktop/bundleTest/bundleTest/SIAppDelegate.m:28 
#6 0x00007fff8606ade2 in __-[NSNotificationCenter addObserver:selector:name:object:]_block_invoke_1() 
#7 0x00007fff8b470e0a in _CFXNotificationPost() 
#8 0x00007fff86057097 in -[NSNotificationCenter postNotificationName:object:userInfo:]() 
#9 0x00007fff8e1bbaa7 in -[NSApplication _postDidFinishNotification]() 
#10 0x00007fff8e1bb80d in -[NSApplication _sendFinishLaunchingNotification]() 
.... 

Full code here

あなたはこの問題hereを示すサンプルプロジェクトをダウンロードすることができます。

私はこれがCocoaのバグだと思っていますが、私はここで何か愚かなことを誰かが見ることができるのだろうか?

答えて

関連する問題