在UIViewControllers之间传递变量不能按预期工作

时间:2014-05-11 10:41:19

标签: ios objective-c cocoa

我试图将一个变量值(在我的情况下是一个简单的整数)从一个UIViewController(" MainVC")传递到另一个(" ChargeVC")。 / p>

我无法解决这个问题,在花了一天时间阅读可用的答案之后,我现在开了一个账号,所以我做了一个改变,得到一个对我有用的答案。我发现" This"非常有帮助,并认为它应该工作,但它不适合我。

我很明显是" xcode" &安培; " Objective-C",但我有坚实的" PHP"和" Javascript"知识。

这是我的代码:

MainVC.m

NSUInteger index = 4;  //will be an index ID used for accessing a table row

ChargeVC *myChargeViewCont = [[ChargeVC alloc] init];
myChargeViewCont.title = @"Charge User";
myChargeViewCont.personIndex = index;

NSLog(@"person index MainVC: %d", [myChargeViewCont personIndex]);

[self.navigationController pushViewController:myChargeViewCont animated:YES];

ChargeVC.h

@interface ChargeVC : UIViewController {
    NSUInteger personIndex;
}
@property (nonatomic) NSUInteger personIndex;
@end

ChargeVC.m

#import "ChargeVC.h"
@implementation ChargeVC

@synthesize personIndex;

- (void)viewDidLoad {
    [super viewDidLoad];

    NSLog(@"person index ChargeVC: %d", personIndex);
}

作为检查,我尝试在" MainVC"中输出一次值。并且一旦进入" ChargeVC"。这是日志:

2014-05-11 12:17:51.242 Kunden[58238:60b] person index ChargeVC: 0
2014-05-11 12:17:51.244 Kunden[58238:60b] person index MainVC: 4

我完全错过了什么吗?任何帮助表示赞赏。

更新

我发现错误并发布了解释答案。如果你知道那里到底发生了什么,我很想知道。

3 个答案:

答案 0 :(得分:1)

你不需要像

那样初始化它
    @interface ChargeVC : UIViewController {
    NSUInteger personIndex;
    }
    @property (nonatomic) NSUInteger personIndex;
    @end

刚做

 @interface ChargeVC : UIViewController
 @property NSUInteger personIndex; 
 @end

很多。您可以通过self.personIndex在.m中访问它们。此外,除非您了解或正在制作此产品,否则请不要使用非原子材料。这些东西令人困惑,如果你学习它,以后会更容易学习。 (我假设爱好项目,如果这是错误的道歉)。

否则,您的代码对我来说似乎是正确的。

答案 1 :(得分:1)

类似于奥斯卡所说的,我希望您的 personIndex ivar personIndex 属性之间存在混淆。

我会这样做,删除ivar声明:

@interface ChargeVC : UIViewController
@property ( nonatomic ) NSUInteger personIndex ;
@end

此外,在您的@implementation中,默认情况下会假设@synthesize,您也可以将其排除在外。

答案 2 :(得分:1)

我发现了我的错误,似乎我从我的问题中遗漏了一段重要的代码,或者你可能已经立即认出了它。对于那个很抱歉。我会发布我学到的东西。

早些时候在“ChargeVC.m”中我设置了

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        self.view.backgroundColor = [UIColor blackColor];
    }
    return self;
}

由于我不完全理解的原因,我设置self.view.backgroundColor的值会触发某些内容并且personIndex变量总是丢失和/或在viewDidLoad期间无法访问。我删除该功能后,personIndex出现了。

感谢rdelmar,让我走上正确的道路,向所有其他人提供帮助。