将NSString发送到viewController会返回null

时间:2013-08-12 21:45:21

标签: iphone objective-c

我向一个viewController发送了一个NSString,试图从另一个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的评论和回答,我更新了我的问题:

habitViwController.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)

2 个答案:

答案 0 :(得分:2)

这是因为ReceiverViewController中有两个不同的变量。

其中一个名为cellName2,您通过NSString *cellName2创建。另一个名为_cellName2,您通过@property(nonatomic,retain) NSString *cellName2;创建。

您可以通过cellName2...在ReceiverViewController中调用第一个。第二,您可以通过_cellName2...self.cellName2拨打电话。

执行obj.cellName2 = ...时,您设置的是_cellName2,而不是cellName2。因此,当您打印cellName2时,它正确为空,因为您尚未设置它。

我建议您从代码中删除NSString *cellName2;。同样适用于其他课程中的cellName

答案 1 :(得分:0)

根据您编辑过的问题,我认为您在ReceiverViewController中根本没有合成cellName2

使用@synthesize声明。

修改

实例化和设置接收视图控制器的值:

ReceiverViewController *rvc = [[ReceiverViewController alloc] init];
rvc.stringValue = @"Hello world :)";
[self presentViewController:rvc animated:YES completion:nil];