2012-02-26 4 views
1

を取得し、奇妙な警告聞くを取得するコードNSMutableDictionaryでNumber型のsetObjectにしようと、私はNSMutableDictionaryにsetObjectにしようとしている奇妙な警告

if ([errorCode intValue] != -1) { 
    NSLog(@"after getting data back"); 
    NSString *userName = [[protocol3Replay valueForKeyPath:uName]autorelease]; 
    NSString *userPassword = [[protocol3Replay valueForKeyPath:pass]autorelease]; 
    NSNumber *UserId = [[protocol3Replay valueForKeyPath:@"Session.user_id"]autorelease]; 
    NSNumber *customerId = [[protocol3Replay valueForKeyPath:@"Session.customer_id"]autorelease]; 

    BOOL b = [file checkFile]; 
    NSLog(@"after check file exists"); 
    if (b == YES) { 
     NSLog(@"file exist"); 
     NSMutableDictionary *fileDic = [[[NSMutableDictionary alloc]init]autorelease]; 

     fileDic = [file readFile]; 

     [fileDic setObject:[NSNumber numberWithInteger:UserId] forKey:@"user_id"]; 
     [fileDic setObject:token forKey:@"device_token"]; 
     [fileDic setObject:[NSNumber numberWithInteger:customerId] forKey:@"customer_id"]; 
     [fileDic setObject:userName forKey:@"user_name" ]; 
     [fileDic setObject:userPassword forKey:@"user_password" ]; 

    } 

衰退のSiである:警告:セマンティック問題:互換性のないポインタへ「NSNumber *」を「NSInteger」(別名int)のパラメータに送信する

方法はそれですか?

+0

私たちに助けてください、どの行がエラーになっていますか?あなたが理解していないエラーメッセージはどうですか? – zaph

+0

BTW、あなたのコード: 'NSMutableDictionary * fileDic = [[[NSMutableDictionary alloc] init] autorelease]; fileDic = [file readFile]; ' に欠陥があります。 2番目の行は '[file readFile]'の結果を代入して、最初の行の 'fileDic'の割り当てを無関係にします。提案:ARCを使用します。これはiOS 4以上で利用できます。 – zaph

+0

これは私のために働いた、ありがとうZaph –

答えて

2

UserIDにはnumberWithInteger:に、これはNSIntegerになります。それはsetObject:とは関係ありません。 UserIDをコピーするか、UserIDからsetObject:に直接渡してください。

1

UserIDはOBJECTで、numberWithIntegerのパラメータは単なる整数であるNSIntegerです。 NSIntegerはNSNumberまたはNSObjectのサブクラスではありません。ポインタではなく、整数です。

あなたの宣言NSNumber * UserID = ...は、NSInteger userID(ポインタではないため*はありません)でなければなりません。

P.S.これは、問題を解決するための1つの方法です。

+0

書くことを試みた:NSNumber UserId = [[protocol3Replay valueForKeyPath:@ "Session.user_id"] autorelease];それはエラー –

+0

としてマークされました。私が言ったように、NSNumberはオブジェクトではないので、それは整数です。 Autoreleaseは整数のためのメソッドではありません。第2に、あなたがvalueForKeyを呼び出しているすべてのステートメントで、メッセージを送信すると、autoreleaseが正しくありません。保持されているオブジェクトにのみ自動解放を送信します。 – dbrajkovic

+0

ありがとうございました! –

関連する問題