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