我在类 SFAViewController
中按下按钮进行调用-(IBAction)uploadselector:(id)sender // Notes and Attachments
{
SFAUploadController *uploadcontroller = [[SFAUploadController alloc] initWithNibName:@"SFAUploadController" bundle:nil];
//[SFAUploadController setRecordId:selectedrecordid];
[self.view addSubview:uploadcontroller.view];
[uploadcontroller setRecordId:selectedrecordid];
NSLog(@"Okay uploading.. with record id %@",selectedrecordid);
}
调用类 SFAUploadController 中的实例方法: -
-(void)setRecordId:(NSString *)value // called by SFAViewController.m
{
self.receivedrecordid = [[NSString alloc]initWithString:@"Empty"];
NSLog(@"Record value set");
//receivedrecordid = value;
}
-(IBAction)selectfile:(id)sender // called when a button clicked in SFAUploadController class
{
NSLog(@"Record in second class: %@",self.receivedrecordid); // causing program crash saying "(lldb)"
}
请解释一下为什么会这样?我不太熟悉在iphone中将值引用从一个类传递到另一个类。
感谢。
答案 0 :(得分:1)
您可能会在selectfile
获得价值之前点击receivedrecordid
?在打印之前检查nil是个好主意,它会避免崩溃,你如何申报收到的记录?如果您使用ARC strong
,则可以创建此属性retain
,您还应检查是否正确连接方法selectfile
的IBAction以进行事件修补。
从症状看,您似乎正在使用一个不可用或已释放/未分配的对象。你应该确保所有的对象和实例都以正确的方式使用。
最好将viewController用作其他类中的属性,以便只要相应的类处于活动状态就可以保留它。
在你的特定情况下,因为你只是设置字符串的值没有什么大的,那么你可以直接这样做而不使用显式方法
uploadController.receivedRecordId=@"stirng you want to assign";
答案 1 :(得分:0)
我认为您不需要创建setter方法来为receivedrecordid
类中的SFAUploadController
变量设置值。
您可以创建@property
,而不是创建setter方法,以便将值设置为receivedrecordid
,如下所示:
SFAUploadController.h
@property (nonatomic, retain) NSSting *receivedrecordid;
在SFAUploadController.m
合成它就像
@synthesize receivedrecordid;
现在您可以直接使用它:
-(IBAction)uploadselector:(id)sender // Notes and Attachments
{
SFAUploadController *uploadcontroller = [[SFAUploadController alloc] initWithNibName:@"SFAUploadController" bundle:nil];
[uploadcontroller setSelectedrecordid:@"recordId"];
[self.view addSubview:uploadcontroller.view];
}
希望它会对你有所帮助。