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 を確認することをお勧めします。クラッシュを回避できます。受信したレコード ID をどのように宣言しますか? strongそれ以外の場合に ARC を使用している場合は、このプロパティを作成できます。また、内部でイベントをretain修正するためにメソッドの IBAction を適切に接続していることも確認する必要があります。selectfile症状から、利用できない、または解放済み/未割り当てのオブジェクトを使用しているようです。すべてのオブジェクトとインスタンスが適切な方法で使用されていることを確認する必要があります。

対応するクラスが存続している限り保持できるように、viewController を他のクラスのプロパティとして使用することを常にお勧めします。

あなたの特定のケースでは、値を文字列に設定しているだけなので、明示的な方法を使用せずに直接行うことができます

uploadController.receivedRecordId=@"stirng you want to assign";
于 2013-03-05T09:42:34.040 に答える
0

クラスのreceivedrecordid変数に値を設定するためのセッターメソッドを作成する必要はないと思います。SFAUploadController

セッターメソッドを作成する代わりに、次のように@property値を設定するために作成できます。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 に答える