2013-10-28 42 views
6

カスタムWeb APIを使用してWebサーバーに接続するこのチュートリアル(http://bit.ly/NI9kQe)に従ってAppを構築しています。要件の1つは、ログインボタンまたは登録ボタンがタップされているかどうかを検出することです。これは、インターフェースビルダーのボタンに設定されている「タグ」を使用して行われます(登録ボタンにはタグが1つあります)。プロパティ 'tag'がタイプ '_strong id'のオブジェクトに見つかりません

コードのチャンクは、次のようにbtnLoginRegisterTappedメソッド内にあります(このエラーは、行 - > NSString *コマンド=(sender.tag == 1)?@ "register":@ "login";):

- (IBAction)btnLoginRegisterTapped:(id)sender { 

//form fields validation 
if (fldUserName.text.length < 4 || fldPassword.text.length < 4) { 
    // [UIAlertView error:@"Enter username and password over 4 chars each."]; 

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Opps!!" message:@"Enter username and password over 4 chars each." delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:nil]; 
    // optional - add more buttons: 
    [alert addButtonWithTitle:@"Yes"]; 
    [alert show]; 
    return; 

} 

//salt the password 
NSString* saltedPassword = [NSString stringWithFormat:@"%@%@", fldPassword.text, kSalt]; 

//prepare the hashed storage 
NSString* hashedPassword = nil; 
unsigned char hashedPasswordData[CC_SHA1_DIGEST_LENGTH]; 

//hash the pass 
NSData *data = [saltedPassword dataUsingEncoding: NSUTF8StringEncoding]; 
if (CC_SHA1([data bytes], [data length], hashedPasswordData)) { 
    hashedPassword = [[NSString alloc] initWithBytes:hashedPasswordData length:sizeof(hashedPasswordData) encoding:NSASCIIStringEncoding]; 
} else { 

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Opps!!" message:@"Password cannot be reset!" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:nil]; 
    // optional - add more buttons: 
    [alert addButtonWithTitle:@"Yes"]; 
    [alert show]; 
    return; 
} 

//************ THIS IS WHERE THE ERROR OCCURS *****************// 
//check whether it's a login or register 
NSString* command = (sender.tag==1)[email protected]"register":@"login"; 
NSMutableDictionary* params =[NSMutableDictionary dictionaryWithObjectsAndKeys: 
           command, @"command", 
           fldUserName.text, @"username", 
           hashedPassword, @"password", 
           nil]; 

//make the call to the web API 
[[API sharedInstance] commandWithParams:params 
          onCompletion:^(NSDictionary *json) { 
           //handle the response 
           //result returned 
           NSDictionary* res = [[json objectForKey:@"result"] objectAtIndex:0]; 

           if ([json objectForKey:@"error"]==nil && [[res objectForKey:@"IdUser"] intValue]>0) { 
            //success 
            [[API sharedInstance] setUser: res]; 
            [self.presentingViewController dismissViewControllerAnimated:YES completion:nil]; 

            //show message to the user 
            [[[UIAlertView alloc] initWithTitle:@"Logged in" 
                   message:[NSString stringWithFormat:@"Welcome %@",[res objectForKey:@"username"] ] 
                   delegate:nil 
                cancelButtonTitle:@"Close" 
                otherButtonTitles: nil] show]; 

           } else { 
            //error 

            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Opps!!" message:@"Server down? Try Again" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:nil]; 
            // optional - add more buttons: 
            [alert addButtonWithTitle:@"Yes"]; 
            [alert show]; 
            return; 

           } 

          }]; 

}

私は(実際にワークスペース)プロジェクトをビルドしようとすると、私はエラーを取得:型のオブジェクトに見つからない

プロパティ 'タグ' 'はIDを_strong'

I a iOS7用にxcode 5.0デプロイメントを使用しています。

おかげで、

答えて

15

プロパティの構文は、一般的なid型の変数で使用することはできません。

だから、どちらか[sender tag]より良いは、 は、メソッド定義にsender引数の実際の型を使用するメソッド呼び出しによってsender.tagを置き換える:

- (IBAction)btnLoginRegisterTapped:(UIButton *)sender { ... } 

ヒント:「コントロールとアクションを作成Xcodeで の "Drag"を選択すると、 "Type"フィールドのポップアップを使用して送信者の実際のタイプを選択できます。 その後、正しい引数型でアクションメソッドが作成されます。

enter image description here

+0

大変です! – Cybernetic

+0

@ user1639594:ようこそ! –

関連する問題