Iphone 将NSString发送到viewController将返回空值

Iphone 将NSString发送到viewController将返回空值,iphone,objective-c,Iphone,Objective C,我向一个viewController发送了一个NSString,试图从另一个viewController记录它,结果它变成了null。我的代码在下面 编辑:我正在删除所有代码,并从我的应用程序中显示我的代码。因为我仍然得到(空) HabitViewController.h DetailViewController.h 我遗漏了很多代码,因为它们与我的问题无关 编辑 根据Jsdodgers的评论和回答,我更新了我的问题: habitViwController.h #import <UI

我向一个viewController发送了一个NSString,试图从另一个viewController记录它,结果它变成了null。我的代码在下面


编辑:我正在删除所有代码,并从我的应用程序中显示我的代码。因为我仍然得到(空)

HabitViewController.h
DetailViewController.h 我遗漏了很多代码,因为它们与我的问题无关


编辑 根据Jsdodgers的评论和回答,我更新了我的问题:

habitViwController.h

#import <UIKit/UIKit.h>

@interface HabitViewController : UITableViewController {

}

@property(nonatomic,retain) NSString *cellName2;

@end
#import <UIKit/UIKit.h>

@interface DetailViewController : UIViewController {

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

@end

DetailViewController.h

#import <UIKit/UIKit.h>

@interface HabitViewController : UITableViewController {

}

@property(nonatomic,retain) NSString *cellName2;

@end
#import <UIKit/UIKit.h>

@interface DetailViewController : UIViewController {

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

@end

但是我还是没有成功。仍然显示(null)

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

其中一个名为
cellName2
,您通过
NSString*cellName2
创建它。另一个称为
\u cellName2
,通过
@property(非原子,保留)NSString*cellName2创建

首先,您可以通过
cellName2…
调用ReceiverViewController。第二,您可以通过
\u cellName2…
self.cellName2
调用

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


我建议完全删除
NSString*cellName2来自您的代码。你另一堂课上的
cellName
也是如此。

根据你编辑的问题,我认为你根本没有在你的ReceiveViewController中合成
cellName2

使用
@synthesis
语句

编辑

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

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

我在代码中没有看到两个视图控制器以任何方式相互交互。我认为这不是您真正的代码。SendingViewController没有cellName2属性。这:
obj.cellName2=cellName
不应该编译,因为
obj
是一个
SendingViewController
,因此没有
cellName2
。当你给我们一些你没有实际编译和运行过的代码,并且遇到了问题时,你只是让每个人都很难弄清楚问题是什么。这段代码没有您所说的bug,但它确实有一堆其他bug。在不知道你的程序是什么样子的情况下,我们所能做的就是盲目猜测。调试器非常适合解决这类问题。你试过了吗?它提供了有用的信息吗?事实上,这是正确的,因为我在发布我的答案之前测试过它。OP不会得到生成错误(但只会得到警告),因为接口中声明了一个同名的私有字符串变量。我已经合成了它,但这不能解决问题吗?我测试了两个具有相同结构的视图控制器,添加synthesis语句为我删除了空日志。仍然得到空日志。上面的代码与示例项目相同吗?是的,基本相同。我只是实例化接收VC并设置属于接收VC的属性
cellName2
。我想我明白了,但不确定。无论如何,我删除了cellName和cellName2的NSString。问题仍然存在。因此,我需要更改其他内容?我需要设置pushToViewController方法吗?这是可能的,但viewDidLoad将不会运行,这意味着(null)正在从其他位置打印。好的,那么您没有看到我的代码有任何错误吗?好的,我在自己的模拟器中运行了它并使其正常工作。您仍然需要去掉NSString*cellLabel2和@Synthesis,当您打印它时,请执行
NSLog(@“%@”,self.cellLabel2)(请确保您做到了
self.
)。
- (void)viewDidLoad
{
    [super viewDidLoad];

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

}
#import <UIKit/UIKit.h>

@interface DetailViewController : UIViewController {

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

@end
@synthesize cellName;

- (void)viewDidLoad
{
    [super viewDidLoad];

    cellName = @"Hello World";

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

    obj.cellName2 = self.cellName;

    [self configureView];


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