2011-10-17 5 views
0

NSNotificationを使用しようとしています。ビューの中でどのボタンが押されたかに基づいてNSDictionaryを作成します。私はNSLogタグ、タグは正しいです。だから私は私の辞書を作成するために、このようなswitchステートメントを使用します。ShowDataで、その後NSNoticationを使用してuserInfo(NSDictionary)を別のオブジェクトに渡す

NSDictionary *dict; 
switch (tag) { 
    case 0: 
     dict = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:tag] forKey:@"ButtonType"]; 
     break; 
    case 1: 
     dict = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:tag], @"ButtonType", nil]; 
     break; 
    case 2: 
     dict = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:tag], @"ButtonType", nil]; 
     break; 
    case 3: 
     dict = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:tag], @"ButtonType", nil]; 
     break; 
    case 4: 
     dict = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:tag], @"ButtonType", nil]; 
     break; 
    default: 
     NSLog(@"No dictionary set for ButtonType"); 
     break; 
} 
[[NSNotificationCenter defaultCenter] postNotificationName:(ShowData:) object:self userInfo:dict]; 

そして:

- (void)ShowData:(NSNotification *)notification { 
    NSLog(@"%s", __FUNCTION__); 
    NSDictionary *userDict = [notification userInfo]; 
    NSInteger theTag = (NSInteger)[userDict objectForKey:@"ButtonType"]; 
    NSLog(@"tag: %i", theTag); // this value is incorrect 

私ShowData方法では、私は同じタグ値を期待します、0- 4ではなく、代わりに187742848のようなものがあります。デバッガをステップ実行すると、渡される値にNSDictionaryのuserInfoが設定されています。 ShowDataに渡す正しいNSDictionaryを作成していないのですか?ありがとう。

答えて

0

私はNSNumberをNSIntegerにキャストできませんでした。私はNSNumberからintegerValueを使う必要があり、正しいタグ値を得ました。

2

辞書から返されたオブジェクトをキャストする代わりに、integerValueを呼び出します。

[[userDict objectForKey:@"ButtonType"] integerValue]; 
関連する問題