我向一个viewController发送了一个NSString,试图从另一个viewController中记录它,它变成了null。我的代码在
之下编辑:我删除所有代码并显示我的应用程序中的代码。因为我还在(null)
#import <UIKit/UIKit.h>
@interface HabitViewController : UITableViewController {
NSString *cellName2;
}
@property(nonatomic,retain) NSString *cellName2;
@end
@synthesize cellName2;
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"%@",cellName2);
}
#import <UIKit/UIKit.h>
@interface DetailViewController : UIViewController {
NSString *cellName;
}
@property(nonatomic,retain) NSString *cellName;
@end
#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)
答案 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];