我在头文件中定义了一个NSString,但是当我尝试从该控制器记录该字符串时它传递null,但是如果没有从视图控制器调用它,则记录变量的值,这是一个问题,因为当我尝试将其记录到不同的视图控制器时它也传递null。 我找到了其他类似的问题,但似乎没有任何解决方案可以提供帮助,所以如果你有一个很棒的解决方案。
我已经在头文件中定义了它:
#import <UIKit/UIKit.h>
@interface QuestionController : UIViewController
@property(weak, nonatomic) NSString *question;
@end
我在主文件中这样称呼它:
#import "QuestionController.h"
@implementation QuestionController
@synthesize question;
-(void) viewDidLoad{
[super viewDidLoad];
question = [NSString stringWithFormat:@"hey"];
NSLog(@"%@", question);
QuestionController *questionController = [[QuestionController alloc]init];
NSLog(@"%@", questionController.question);
}
@end
答案 0 :(得分:0)
写作时
QuestionController *questionController = [[QuestionController alloc]init];
NSLog(@"%@", questionController.question);
你不&#34;从[当前]控制器记录该字符串。&#34;相反,您已经创建了QuestionController
的完全独立的实例(与您刚刚设置question
的当前视图控制器不同)并且因为您没有&# 39;在任何时候设置 question
属性,NSLog
将打印为nil。
然而,在你的第一个NSLog
中,即
question = [NSString stringWithFormat:@"hey"];
NSLog(@"%@", question);
您实际上是在question
的当前实例中设置的QuestionController
,因此按预期打印。
要设置questionController
的{{1}}属性以包含question
,请尝试:
question
答案 1 :(得分:0)
我已清理您的代码以使其正常工作,在底部您会找到解释。
#import <UIKit/UIKit.h>
@interface QuestionController : UIViewController
@property(strong, nonatomic) NSString *question;
@end
#import "QuestionController.h"
@implementation QuestionController
-(void) viewDidLoad{
[super viewDidLoad];
_question = @"hey";
NSLog(@"%@", _question);
QuestionController *questionController = [[QuestionController alloc]init];
questionController.question = _question;
NSLog(@"%@", questionController.question);
}
@end
有几点需要注意。
希望这有助于您准确了解代码中发生了什么。我假设你没有故意在第一个加载时创建一个新的QuestionController。这也会导致某种无限循环,因为您创建的每个循环都会在您访问其视图属性时创建另一个循环。