新人求助,创建输出口时,.m文件没有对应生成synthesize语句

猪皮冻 2014-11-16 10:50:03
如题:用control加拖动的方式在.h文件中添加输出口,但是.m文件中并没有对应生成@synthesize语句,请问是什么原因,IDE是Xcode6.1,
...全文
158 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
不担心 2014-11-16
  • 打赏
  • 举报
回复
那我就不知道了,我没有用过sb和xib来画界面,都是用代码写的
猪皮冻 2014-11-16
  • 打赏
  • 举报
回复
引用 1 楼 disburden 的回复:
新版本的xcode在你定义属性时会自动帮你创建一个_开头的同名内部变量(比如你定义一个name属性,那么默认会有一个_name的内部变量),所以@synthesize默认可以不用写,除非你的属性和你的内部变量不同名才要用到
但是并没有定义内部变量。运行出现错误,我才发现没有生成@synthesize语句的
不担心 2014-11-16
  • 打赏
  • 举报
回复
新版本的xcode在你定义属性时会自动帮你创建一个_开头的同名内部变量(比如你定义一个name属性,那么默认会有一个_name的内部变量),所以@synthesize默认可以不用写,除非你的属性和你的内部变量不同名才要用到
猪皮冻 2014-11-16
  • 打赏
  • 举报
回复
谢谢各位,问题解决了,用得self.statusText调用就可以了
ReyZhang 2014-11-16
  • 打赏
  • 举报
回复
引用 15 楼 mghhz816210 的回复:
[quote=引用 14 楼 zhanglei5415 的回复:] [quote=引用 7 楼 mghhz816210 的回复:] [quote=引用 6 楼 zhanglei5415 的回复:] 从ios 5.0 之后@synthesize 的编译器指令已经不需要了。编译器不需要再使用@synthesize指令就可以为属性生成getter,setter 方法了。估计你现在学习的资料有点老了,现在都到ios8.1 了
那是用什么方法生成的getter和setter方法,如果不加@synthesize编译器提示出错呀![/quote] 报什么错,使用什么版本的sdk编译的你的应用 ?[/quote] /Users/pro/Documents/own_project/mghhz02/mghhz02/ViewController.m:32:5: Use of undeclared identifier 'statusText'; did you mean '_statusText'? 报的这个错[/quote] 尝试使用self.statusText 或 _statusText 访问。你既然使用了属性,那么建议你使用self.statusText来访问或赋值。
猪皮冻 2014-11-16
  • 打赏
  • 举报
回复
引用 14 楼 zhanglei5415 的回复:
[quote=引用 7 楼 mghhz816210 的回复:] [quote=引用 6 楼 zhanglei5415 的回复:] 从ios 5.0 之后@synthesize 的编译器指令已经不需要了。编译器不需要再使用@synthesize指令就可以为属性生成getter,setter 方法了。估计你现在学习的资料有点老了,现在都到ios8.1 了
那是用什么方法生成的getter和setter方法,如果不加@synthesize编译器提示出错呀![/quote] 报什么错,使用什么版本的sdk编译的你的应用 ?[/quote] /Users/pro/Documents/own_project/mghhz02/mghhz02/ViewController.m:32:5: Use of undeclared identifier 'statusText'; did you mean '_statusText'? 报的这个错
ReyZhang 2014-11-16
  • 打赏
  • 举报
回复
引用 7 楼 mghhz816210 的回复:
[quote=引用 6 楼 zhanglei5415 的回复:] 从ios 5.0 之后@synthesize 的编译器指令已经不需要了。编译器不需要再使用@synthesize指令就可以为属性生成getter,setter 方法了。估计你现在学习的资料有点老了,现在都到ios8.1 了
那是用什么方法生成的getter和setter方法,如果不加@synthesize编译器提示出错呀![/quote] 报什么错,使用什么版本的sdk编译的你的应用 ?
Bannings 2014-11-16
  • 打赏
  • 举报
回复
引用 12 楼 mghhz816210 的回复:
[quote=引用 11 楼 zhangao0086 的回复:] 如果你的属性是这样定义的:

@property (nonatomic, weak) IBOutlet UILabel *statusText;
编译器会自动生成:

@synthesize statusText = _statusText;
所以你访问的时候有两种方式: 一是self.statusText,这是调用了getStatusText这个方法取得引用 二是_statusText.
定义的时候属性是强变量,其他没有区别,但是编译器没有自动生成后面那句[/quote] 我们所说的是编译器生成的,也就是编译时才生成,不是IDE(Xcode)生成的,你怎么看得到?这成了编译器默认的一部分
猪皮冻 2014-11-16
  • 打赏
  • 举报
回复
引用 11 楼 zhangao0086 的回复:
如果你的属性是这样定义的:

@property (nonatomic, weak) IBOutlet UILabel *statusText;
编译器会自动生成:

@synthesize statusText = _statusText;
所以你访问的时候有两种方式: 一是self.statusText,这是调用了getStatusText这个方法取得引用 二是_statusText.
定义的时候属性是强变量,其他没有区别,但是编译器没有自动生成后面那句
Bannings 2014-11-16
  • 打赏
  • 举报
回复
如果你的属性是这样定义的:

@property (nonatomic, weak) IBOutlet UILabel *statusText;
编译器会自动生成:

@synthesize statusText = _statusText;
所以你访问的时候有两种方式: 一是self.statusText,这是调用了getStatusText这个方法取得引用 二是_statusText.
猪皮冻 2014-11-16
  • 打赏
  • 举报
回复
引用 9 楼 zhangao0086 的回复:
[quote=引用 8 楼 mghhz816210 的回复:] [quote=引用 5 楼 zhangao0086 的回复:] 没有自动生成@synthesize指令是因为这已经是编译器的默认设置了。
那是用什么方法来解决getter和setter函数定义的呢[/quote] 那肯定是代码的问题,把报错和代码贴上来[/quote] 一个button一个label,button的操作是buttonPressed,label的输出口是status text,没有定义@synthesize的时这个status text, buttonPressed的代码如下

-(IBAction)buttonPressed:(UIButton *)sender
{
NSString *title=[sender titleForState:UIControlStateNormal];
statusText.text=[NSString stringWithFormat:@"%@ button pressed",title];
}
因为源文件给删了,然后就打了个操作
Bannings 2014-11-16
  • 打赏
  • 举报
回复
引用 8 楼 mghhz816210 的回复:
[quote=引用 5 楼 zhangao0086 的回复:] 没有自动生成@synthesize指令是因为这已经是编译器的默认设置了。
那是用什么方法来解决getter和setter函数定义的呢[/quote] 那肯定是代码的问题,把报错和代码贴上来
猪皮冻 2014-11-16
  • 打赏
  • 举报
回复
引用 5 楼 zhangao0086 的回复:
没有自动生成@synthesize指令是因为这已经是编译器的默认设置了。
那是用什么方法来解决getter和setter函数定义的呢
猪皮冻 2014-11-16
  • 打赏
  • 举报
回复
引用 6 楼 zhanglei5415 的回复:
从ios 5.0 之后@synthesize 的编译器指令已经不需要了。编译器不需要再使用@synthesize指令就可以为属性生成getter,setter 方法了。估计你现在学习的资料有点老了,现在都到ios8.1 了
那是用什么方法生成的getter和setter方法,如果不加@synthesize编译器提示出错呀!
ReyZhang 2014-11-16
  • 打赏
  • 举报
回复
从ios 5.0 之后@synthesize 的编译器指令已经不需要了。编译器不需要再使用@synthesize指令就可以为属性生成getter,setter 方法了。估计你现在学习的资料有点老了,现在都到ios8.1 了
Bannings 2014-11-16
  • 打赏
  • 举报
回复
没有自动生成@synthesize指令是因为这已经是编译器的默认设置了。
Bannings 2014-11-16
  • 打赏
  • 举报
回复
ios5之前的版本才需要手动使用@synthesize指令来生成属性的getter,setter方法。

29,030

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧