Ios 在视图控制器之间传递数据(是的,我知道…)

Ios 在视图控制器之间传递数据(是的,我知道…),ios,objective-c,Ios,Objective C,是的,我知道这个问题在这里很受欢迎,这个问题有很多答案,是的,我在这里。但是我很长时间都做不到 在ViewControllerB.h中,我为BOOL创建了一个属性 @property(nonatomic) BOOL *someBool; ViewControllerA.m: #import "ViewControllerB.h" ViewControllerB *viewControllerB = [[ViewControllerB alloc] init]; viewControllerB

是的,我知道这个问题在这里很受欢迎,这个问题有很多答案,是的,我在这里。但是我很长时间都做不到

在ViewControllerB.h中,我为BOOL创建了一个属性

@property(nonatomic) BOOL *someBool;
ViewControllerA.m:

#import "ViewControllerB.h"

ViewControllerB *viewControllerB = [[ViewControllerB alloc] init];
viewControllerB.someBool = YES;
[self.navigationController pushViewController:viewControllerB  animated:YES];
在ViewControllerB.m ViewDidLoad中:

NSLog(@"%@", self.someBool);
但是xCode在这一行给我错误NSLog%@,self.someBool;并说:线程1:EXC_BAD_ACCESS code=2。我做错了什么?

将其声明为BOOL,而不是指向BOOL的指针:


您的属性是指针。不应该这样。更改此项:

@property(nonatomic) BOOL *someBool;
致:

日志应为:

NSLog(@"%d", self.someBool);

仅将%@用于对象。

您需要将其声明为基本体并去掉*或将其包装为NSNumber以将其存储为对象

@属性强,非原子NSNumber*someBool


然后你会写someBool.boolValue来获取它的值

@rokjarc为什么你建议将它移动到一个单例?在这种情况下,这样的建议是没有根据的。@rmaddy:好吧,我承认我有点夸张了。但这个特殊的案例只是更大应用程序的一部分。我相信视图或控制器中没有数据的位置。人们越早学会使用MVC,在ViewController之间传递数据的问题就越少:@rmaddy:是的,这是一个不好的建议。我正在删除它。@rokjarc虽然我同意在MVC中正确使用m很重要,但视图控制器有自己的状态和属性。不是所有的东西都属于这个模型。顺便说一句,了解为什么和何时使用指针以及为什么和何时不使用指针是很重要的。在本例中不需要这样做,因为BOOL是本机类型而不是类。除了非常罕见的情况外,在定义属性时,决不要对本机类型使用指针,当然,必须对对象类型使用指针。
@property(nonatomic) BOOL someBool;
NSLog(@"%d", self.someBool);