2012-02-02 10 views
1

UIViewControllerがNSObjectであるため、NSMutableDictionaryにUIViewControllerのサブクラスを追加しても問題ありません。UIViewControllerサブクラスをNSDictionaryに追加できません

NSArray *requestingPathes = [[NSArray alloc] initWithObjects:indexPath, nil]; 
requestingPair = [[NSMutableDictionary alloc] initWithObjectsAndKeys:requestingPathes, dele, nil]; 

(言及サブクラスであることを起こる)デリゲート「DELEは」辞書「requestingPair」を初期化するために使用されているアプリのクラッシュ:

これは私のコードです。

エラーは次のとおりです。

-[MainViewController copyWithZone:]: unrecognized selector sent to instance 0x7446b30 
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MainViewController copyWithZone:]: unrecognized selector sent to instance 0x7446b30 

0x7446b30は、サブクラスのアドレスである「MainViewController

ですが、なぜでしょう

答えて

4

-initWithObjectsAndKeys:は、その順序で、オブジェクトやキーのリストを期待?あなたがやっていることはdeleというオブジェクトをキーとして使用して、requestingPathesの値を取得できるようにすることです; NSDictionaryオブジェクトはあなたのキーをコピーします。それらを設定し、あなたのView Controllerはコピーをサポートしていないので、失敗します。あなたはその後、[requestPair objectForKey:@"paths"][requestingPair objectForKey:@"delegate"]とパスを呼び出すことにより、デリゲートオブジェクトを取得することができます

requestingPair = [[NSMutableDictionary alloc] initWithObjectsAndKeys:requestingPathes, @"paths", dele, @"delegate", nil]; 

:おそらく何がやりたいことより、このようなものです。

+1

デリゲートがキーである必要があります。それぞれがindexPathesの配列に関連付けられたデリゲートのリストがあります。私はキーがコピーされているか分からなかった。だからNSNumberとしてデリゲートのアドレスを格納します。 –

2

あなたの辞書キーは、UIViewController(およびあなたのMainViewController)が持たないNSCopyingプロトコルに準拠している必要があります。

削除をキーまたは値にしますか?それは現在の鍵です。

関連する問題