简体   繁体   English

在其他方法的init方法之后,NSString属性是否为空?

[英]NSString property gets null after init method in other methods?

I got a little problem. 我有点问题。 Here's my source code: 这是我的源代码:

The .h: .h:

#import <UIKit/UIKit.h>

@interface TBNoteViewController : UIViewController <UITextViewDelegate>
@property (nonatomic, copy) NSString *noteKey;
- (IBAction)dismissKeyboard:(id)sender;
- (id)initWithNoteIndex:(int)index;
@end

The .m: .m:

#import "TBNoteViewController.h"
#import "PSPDFTextView.h"
#include <tgmath.h>

@interface TBNoteViewController ()
{
CGRect _keyboardRect;
BOOL _keyboardVisible;
}

@property (nonatomic, strong) UIBarButtonItem *rightBarButton;
@property (nonatomic, strong) PSPDFTextView *textView;

@end

@implementation TBNoteViewController
@synthesize noteKey;

- (id)initWithNoteIndex:(int)index
{
self = [super init];

if (self) {
    NSMutableArray *data = [[NSMutableArray alloc] initWithArray:[[NSUserDefaults   standardUserDefaults] objectForKey:@"Notes"] copyItems:YES];
    self.noteKey = [NSString stringWithFormat:@"%@", [data objectAtIndex:index]];

    NSLog(@"1: %@", self.noteKey);
}

return self;
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
    // Custom initialization
}
return self;
}

- (void)viewDidLoad
{

NSLog(@"2: %@", self.noteKey);

// Register notifications
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShowNotification:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHideNotification:) name:UIKeyboardWillHideNotification object:nil];

_rightBarButton = [self.navigationItem rightBarButtonItem];

self.navigationItem.rightBarButtonItem = nil;

PSPDFTextView *textView = [[PSPDFTextView alloc] initWithFrame:self.view.bounds];
textView.delegate = self;
textView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
textView.font = [UIFont systemFontOfSize:17.f];

[self.view addSubview:textView];

self.textView = textView;

[self.textView setTextContainerInset:UIEdgeInsetsMake(5, 12, 5, 12)];
self.textView.alwaysBounceVertical = YES;
self.textView.keyboardAppearance = UIKeyboardAppearanceDark;

textView.text = self.noteKey;

[super viewDidLoad];
// Do any additional setup after loading the view.
}

So my problem is that the property noteKey has a string, but in viewDidLoad it is null. 所以我的问题是属性noteKey有一个字符串,但在viewDidLoad中它是null。

So, you can see the NSLogs, the output would be (just copied that): 所以,你可以看到NSLogs,输出就是(只是复制了):

2014-02-13 23:07:21.197 TaskBeater[3205:70b] 1: Hoho. 2014-02-13 23:07:21.197 TaskBeater [3205:70b] 1:Hoho。

2014-02-13 23:07:21.199 TaskBeater[3205:70b] 2: (null) 2014-02-13 23:07:21.199 TaskBeater [3205:70b] 2:(null)

I would highly appreciate if you could help me, I have no idea what's wrong there. 如果你能帮助我,我将非常感激,我不知道那里有什么问题。

It looks to me like you're instantiating two different " TBNoteViewController " instances. 它看起来像你在实例化两个不同的“ TBNoteViewController ”实例。

You're doing one programatically (in code), which is how you're getting the " noteKey " property to appear properly. 你正在以编程方式(在代码中)做一个,这就是你如何使“ noteKey ”属性正确显示。

Then the second one is created because you loaded it from a XIB file, which is why " viewDidLoad: " gets called. 然后创建第二个,因为您从XIB文件加载它,这就是调用“ viewDidLoad: ”的原因。

After getting rid of the extra one that you're calling in code, create an outlet to the one you created via the XIB file, and then you can set properties on that and you should be all set. 在删除了您在代码中调用的额外的一个之后,为您通过XIB文件创建的那个创建一个插座,然后您可以设置该属性,并且您应该全部设置。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM