通过打印"(lldb)"在iphone中调用实例方法来设置导致崩溃的值。在iOS Xcode中

时间:2013-03-05 09:25:19

标签: iphone ios xcode lldb

我在类 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中将值引用从一个类传递到另一个类。

感谢。

2 个答案:

答案 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];
}

希望它会对你有所帮助。