Objective c 将NSDate传递给指针时EXC\u访问错误
我在注释行中得到了这个错误。 datachoice是UserData的一个对象,它是外部的,但我导入了它。 我在.h中保留了datesave,我也不知道什么是加入,一些没有发布的东西可能 hObjective c 将NSDate传递给指针时EXC\u访问错误,objective-c,ios,nsdate,exc-bad-access,Objective C,Ios,Nsdate,Exc Bad Access,我在注释行中得到了这个错误。 datachoice是UserData的一个对象,它是外部的,但我导入了它。 我在.h中保留了datesave,我也不知道什么是加入,一些没有发布的东西可能 h #导入 @接口DateViewController:UIViewController @属性(强,保留)IBUIDatePicker*datepick; @属性(强,保留)IBNSDATE*datesave; -(iAction)okDatebutton:(id)发送方; @结束 m -(iAction)
#导入
@接口DateViewController:UIViewController
@属性(强,保留)IBUIDatePicker*datepick;
@属性(强,保留)IBNSDATE*datesave;
-(iAction)okDatebutton:(id)发送方;
@结束
m
-(iAction)确定日期按钮:(id)发送者{
datesave=[datepick date];
datechoice->date=datesave;//您使用的是ARC吗?我认为您的属性定义看起来是错误的
如果我没有记错的话,strong
只对ARC有效,retain
只对ARC无效。我很惊讶,如果这是问题所在,它可以让你编译。永远不要(*)对对象使用->
操作符。你的意思是:
self.datechoice.date = datesave;
(*)这条规则中有一条是必需的,但它不适用于iOS,只适用于Mac。尝试在分配给datesave
之后添加一个NSLog(“%p”,datechoice)
,看看是否会在日志中打印非null。您的意思是:“datachoice是UserData的对象,它是外部的,但我导入了它。”?您能显示相应的代码吗?retain
在ARC下有效。它被视为strong
的同义词。定义错误是对的,但我不认为这是原因。啊,是的,您是对的。虽然它看起来很奇怪!@user1191343如果您使用ARC,约定将是(非原子,strong)
或(非原子,弱)
取决于您需要的所有权类型。看起来datachoice是一个外部的
-ed全局的,所以OP可能不想做self
。感谢这本书,读起来很有趣:)我不能做self,因为日期选择是UserDate的外部对象,或者我可以吗?我可能不明白你的意思,谢谢..走吧它只是删除了strong,并将->更改为dotI。我明白你的意思;使用全局可变对象(首选singleton模式,甚至类方法)通常不是一个好主意,但我明白你的意思。你肯定应该使用一些命名约定来明确这是一个全局对象。@dasblinkenlight很高兴你喜欢它。谢谢。
-(IBAction)okDatebutton:(id)sender {
datesave = [datepick date];
datechoice->date = datesave; //<-----------------here is the EXC_BAD_ACCESS
}
@end
self.datechoice.date = datesave;