使用连接器连接按钮,文本字段和标签后,不会自动为标签和文本字段(两个都是出口)生成@synthesize语句,因此当我尝试访问标签或文本字段或其属性时在.m文件中它表示"使用未声明的标识符"但Xcode不应该自动完成吗?我正在关注本教程http://www.youtube.com/watch?v=c3Yd2kCPs5c(大约4:35它显示了自动生成的@synthesize语句,这些语句在xcode中不再发生),这就是我猜测导致此错误的原因。我不应该手动添加这些吗?解决这个问题的最佳方法是什么?
-------.m Fie--------
//
// ViewController.m
// AutoConnection
//
// Created by Administrator on 29/03/13.
// Copyright (c) 2013 Administrator. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)changeLabel:(id)sender {
NSString *message = [[NSString alloc] initWithFormat:@"Hello %@", [myTextFeild text]];
[myLabel setText:message];
}
@end
---------.h file------------
//
// ViewController.h
// AutoConnection
//
// Created by Administrator on 29/03/13.
// Copyright (c) 2013 Administrator. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
- (IBAction)changeLabel:(id)sender;
@property (weak, nonatomic) IBOutlet UILabel *myLabel;
@property (weak, nonatomic) IBOutlet UITextField *myTextFeild;
@end
答案 0 :(得分:5)
看到你的密码后,
@property (weak, nonatomic) IBOutlet UILabel *myLabel;
@property (weak, nonatomic) IBOutlet UITextField *myTextFeild;
您将它们作为:
发送给他们 [myLabel setText:message];
哪个不对。
应为[_myLabel setText:message];
或[self.myLabel setText:message];
原因:使用XCode4.4及更高版本运行的编译器,将您的属性自动合成为
@synthesize yourProperty=_yourProperty;
或者,如果您希望使用相同的属性名称
,则可以覆盖此项@synthesize yourProperty;
答案 1 :(得分:3)
您不再需要使用@synthesize
。现在更容易,因为您只需要在属性前添加_
字符。实施例
//header
@property (nonatomic) UILabel *l;
//implementation
-(void)viewDidLoad{
_l = [[UILabel alloc] init];
//do stuff
}
您也可以手动添加合成线
答案 2 :(得分:2)
您需要使用self进行自动合成属性使用
- (IBAction)changeLabel:(id)sender {
NSString *message = [[NSString alloc] initWithFormat:@"Hello %@", [myTextFeild text]];
[self.myLabel setText:message];
}
如果您有一个名为 myLabel 的属性,编译器将生成代码,就像
一样@synthesize myLabel=_myLabel;
使用Xcode 4.4和LLVM Compiler 4.0,不再需要@synthesize指令,因为它将默认提供。这意味着在大多数情况下,您现在只需要@property,编译器会为您处理其他所有事情。通常,编译器会自动生成实例变量。
因此,如果您想访问媒体资源,可以使用self.myLabel
,例如,您可以使用_myLabel
答案 3 :(得分:2)
@synthesize现在由编译器自动完成。 @property创建了一个getter和setter方法,可以使用点符号(例如self.myLabel)访问它。 这些方法使用变量来存储您正在访问的对象。 Xcode通过在属性名称中添加下划线来生成变量名称。
只使用getter和setter,并且不使用实例变量访问对象(例如_myLabel = foo)。这种风格很糟糕。
这是一个很好的iTunes U课程,涵盖了所有这些:Coding Together: Developing Apps for iPhone and iPad