【问题标题】:Property 'tag' not found on object of type '_strong id'在“_strong id”类型的对象上找不到属性“标签”
【发布时间】:2013-11-07 15:15:38
【问题描述】:

我正在根据本教程 (http://bit.ly/NI9kQe) 构建一个应用程序,它使用自定义 web api 连接到 web 服务器。要求之一是检测是否已点击登录或注册按钮。这是使用为界面构建器中的按钮设置的“标签”完成的(注册按钮的标签为 1)。

代码块位于 btnLoginRegisterTapped 方法中,如下所示(错误发生在行 -> NSString* command = (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)?@"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;

                               }

                           }];

}

当我尝试构建项目(实际上是工作区)时,我得到了错误:

在“_strong id”类型的对象上找不到属性“标签”

我正在使用为 iOS7 部署的 xcode 5.0。

谢谢,

【问题讨论】:

    标签: ios xcode properties tags


    【解决方案1】:

    属性语法不能与泛型 id 类型的变量一起使用。

    所以要么用方法调用[sender tag] 替换sender.tag,要么更好, 在方法定义中使用sender 参数的实际类型:

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

    提示: 在 Xcode 中使用“Control-Drag”创建动作时, 使用“类型”字段中的弹出窗口来选择发件人的实际类型。 然后使用正确的参数类型创建操作方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-27
      • 2012-03-04
      • 1970-01-01
      • 2019-10-11
      • 1970-01-01
      • 2019-11-05
      • 2023-03-22
      • 2019-06-25
      相关资源
      最近更新 更多