-4

NSString を viewController に送信し、別の viewController からログに記録しようとしたところ、null になりました。私のコードは以下です


編集:すべてのコードを削除し、アプリケーションからコードを表示しています。私はまだ取得しているので (null)

HabitViewController.h

 #import <UIKit/UIKit.h>

@interface HabitViewController : UITableViewController {

    NSString *cellName2;

}

@property(nonatomic,retain) NSString *cellName2;

@end

HabitViewController.m

@synthesize cellName2;

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSLog(@"%@",cellName2);

}

DetailViewController.h

#import <UIKit/UIKit.h>

@interface DetailViewController : UIViewController {

    NSString *cellName;
}
@property(nonatomic,retain) NSString *cellName;

@end

DetailViewController.m

#import "DetailViewController.h"

#import "HabitViewController.h"

@end

@implementation DetailViewController

@synthesize cellName;

#pragma mark - Managing the detail item

- (void)viewDidLoad
{
    [super viewDidLoad];

    cellName = @"Hello World";

    HabitViewController *obj = [[HabitViewController alloc] init];

    obj.cellName2 = cellName;
}

私の問題とは何の関係もないので、多くのコードを省略しました。


編集

Jsdodgers のコメントと回答に基づいて、私の質問を更新しました。

習慣ViewController.h

#import <UIKit/UIKit.h>

@interface HabitViewController : UITableViewController {

}

@property(nonatomic,retain) NSString *cellName2;

@end

.m

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSLog(@"%@",self.cellName2);

}

DetailViewController.h

#import <UIKit/UIKit.h>

@interface DetailViewController : UIViewController {

}
@property(nonatomic,retain) NSString *cellName;

@end

.m

@synthesize cellName;

- (void)viewDidLoad
{
    [super viewDidLoad];

    cellName = @"Hello World";

    HabitViewController *obj = [[HabitViewController alloc] init];

    obj.cellName2 = self.cellName;

    [self configureView];


}

しかし、私はまだ成功していません。まだ言う (null)

4

2 に答える 2

2

これは、ReceiverViewController に 2 つの異なる変数があるためです。

それらの 1 つは と呼ばれcellName2、 を通じて作成していますNSString *cellName2。もう 1 つは、_cellName2で作成している と呼ばれます@property(nonatomic,retain) NSString *cellName2;

を介してReceiverViewControllerで最初に呼び出すことができますcellName2..._cellName2...2 つ目は、 または のいずれかを介して呼び出すことができますself.cellName2

すると、ではなくobj.cellName2 = ...が設定されます。したがって、印刷すると、まだ設定していないため、正しく null になります。_cellName2cellName2cellName2

コードからを完全に削除することをお勧めしNSString *cellName2;ます。cellName他のクラスでも同じことが言えます。

于 2013-08-12T22:17:03.740 に答える
0

cellName2編集した質問に基づいて、ReceiverViewController で合成されていないと思います。

@synthesizeステートメントを使用します。

編集

受信ビュー コントローラーのインスタンス化と値の設定:

ReceiverViewController *rvc = [[ReceiverViewController alloc] init];
rvc.stringValue = @"Hello world :)";
[self presentViewController:rvc animated:YES completion:nil];
于 2013-08-12T22:18:47.980 に答える