-4

我向 viewController 发送了一个 NSString,尝试从另一个 viewController 记录它,结果它变成了 null。我的代码如下


编辑:我删除所有代码并从我的应用程序中显示我的代码。因为我仍然得到 (null)

习惯视图控制器.h

 #import <UIKit/UIKit.h>

@interface HabitViewController : UITableViewController {

    NSString *cellName2;

}

@property(nonatomic,retain) NSString *cellName2;

@end

习惯视图控制器.m

@synthesize cellName2;

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSLog(@"%@",cellName2);

}

DetailViewController.h

#import <UIKit/UIKit.h>

@interface DetailViewController : UIViewController {

    NSString *cellName;
}
@property(nonatomic,retain) NSString *cellName;

@end

细节视图控制器.m

#import "DetailViewController.h"

#import "HabitViewController.h"

@end

@implementation DetailViewController

@synthesize cellName;

#pragma mark - Managing the detail item

- (void)viewDidLoad
{
    [super viewDidLoad];

    cellName = @"Hello World";

    HabitViewController *obj = [[HabitViewController alloc] init];

    obj.cellName2 = cellName;
}

我遗漏了很多代码,因为它们与我的问题无关。


编辑

根据 Jsdodgers 的评论和回答,我更新了我的问题:

habitViwController.h

#import <UIKit/UIKit.h>

@interface HabitViewController : UITableViewController {

}

@property(nonatomic,retain) NSString *cellName2;

@end

.m

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSLog(@"%@",self.cellName2);

}

DetailViewController.h

#import <UIKit/UIKit.h>

@interface DetailViewController : UIViewController {

}
@property(nonatomic,retain) NSString *cellName;

@end

.m

@synthesize cellName;

- (void)viewDidLoad
{
    [super viewDidLoad];

    cellName = @"Hello World";

    HabitViewController *obj = [[HabitViewController alloc] init];

    obj.cellName2 = self.cellName;

    [self configureView];


}

但我仍然没有任何成功。仍然说(空)

4

2 回答 2

2

这是因为您的 ReceiverViewController 中有两个不同的变量。

其中之一被称为cellName2,您正在通过它创建NSString *cellName2。另一个称为_cellName2您正在创建的@property(nonatomic,retain) NSString *cellName2;.

第一个您可以通过 ReceiverViewController 调用cellName2...。第二,您可以通过_cellName2...或调用self.cellName2

当你这样做时obj.cellName2 = ...,你是在设置_cellName2,而不是cellName2。因此,当您 print 时cellName2,它是正确的 null 因为您尚未设置它。

我建议NSString *cellName2;从您的代码中完全删除。你的其他班级也是如此cellName

于 2013-08-12T22:17:03.740 回答
0

根据您编辑的问题,我认为您根本没有cellName2在 ReceiverViewController 中合成。

使用@synthesize语句。

编辑

实例化和设置接收视图控制器的值:

ReceiverViewController *rvc = [[ReceiverViewController alloc] init];
rvc.stringValue = @"Hello world :)";
[self presentViewController:rvc animated:YES completion:nil];
于 2013-08-12T22:18:47.980 回答