1

我通过单击类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 中的另一个类。

谢谢。

4

2 回答 2

1

您可能会在获得价值selectfile之前点击?receivedrecordid在打印之前检查 nil 可能是个好主意,这样可以避免崩溃,你如何声明你收到的recordid?strong如果您使用 ARC ,则可以设置此属性,否则retain,您还应该检查是否selectfile正确连接了 IBAction for 方法以进行内部事件修饰。从症状看来,您正在使用一个不可用或已释放/未分配的对象。您应该确保所有对象和实例都以正确的方式使用。

在其他类中使用 viewController 作为属性总是一个好主意,这样只要相应的类还活着,它就可以保留。

在您的特定情况下,因为您将值设置为字符串只是没什么大的,那么您可以直接执行此操作而无需使用显式方法

uploadController.receivedRecordId=@"stirng you want to assign";
于 2013-03-05T09:42:34.040 回答
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];
}

希望它会帮助你。

于 2013-03-05T10:23:43.067 回答