在两个DetailViewController之间传递NSString

时间:2013-09-16 12:36:40

标签: ios objective-c nsstring

MasterViewController.m

#import "DetailViewController.h"

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {
    if ([segue.identifier isEqualToString:@"DetailViewControllerSeque"]) {
        DetailViewController *detailView = [segue destinationViewController];

        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];

        theList = [app.listArray objectAtIndex:indexPath.row];

        detailView.theList = theList;

        // String to pass to DetailViewController
        detailView.string2pass = @"this is a passing string";
    }
}


DetailViewController.h

NSString *string2pass;

@property (retain, nonatomic) NSString *string2pass;


DetailViewController.m

NSLog(@"%@", string2pass);

输出:( null)


我做错了什么?

4 个答案:

答案 0 :(得分:4)

除非您在实施中使用此功能,否则它将无法按预期工作。

@synthesize string2pass = string2pass;

..或者您可以通过删除以下行来修复它:

NSString *string2pass;

您的日志记录了您声明的string2pass变量的值。但是还有另一个变量_string2pass。

NSLog(@"%@", string2pass);

如果未显式编写@synthesize语句,则声明的@property由变量名_string2pass支持。不写@sythesize语句就像声明一样:

@synthesize string2pass = _string2pass;

答案 1 :(得分:0)

self.string2pass中使用NSLog。当我们使用自我时。要访问属性,则调用getter / setter。

答案 2 :(得分:0)

首先,您需要将NSString属性添加到SecondViewController.h文件中:

@property (nonatomic, copy) NSString *myString;

然后在FirstViewController.m文件中创建SecondViewController对象并将其传递给它,无论你想要什么字符串:

SecondViewController *secondViewcontroller = [[SecondViewController alloc] initWithNibName:@"ACEViewController" bundle:nil];
secondViewcontroller.myString = @"WhateverYouNeedToPass";

SecondViewController

中的日志字符串
NSLog(@"%@", self.myString);

答案 3 :(得分:0)

DetailViewController.h 中,只需要定义 -

@property (strong, nonatomic) NSString *string2pass;

DetailViewController.m

@synthesize string2pass 

这对你有用。