Iphone 如何从一个viewcontroller为另一个视图控制器中的NSString设置值

Iphone 如何从一个viewcontroller为另一个视图控制器中的NSString设置值,iphone,objective-c,uistoryboard,ios5.1,Iphone,Objective C,Uistoryboard,Ios5.1,我使用的是Xcode 4.3.2和iOS 5.1模拟器,在我的项目中,我使用了两个视图控制器:testingViewController和detailView。在testingViewController中选择tableViewCell后,我想在detailView中为NSString设置值 为此,我使用了以下代码: testingViewController.h testingViewController.m detailView.h detailView.m 我在控制台中为wordN

我使用的是Xcode 4.3.2和iOS 5.1模拟器,在我的项目中,我使用了两个视图控制器:testingViewController和detailView。在testingViewController中选择tableViewCell后,我想在detailView中为NSString设置值

为此,我使用了以下代码:

testingViewController.h

testingViewController.m

detailView.h

detailView.m

我在控制台中为
wordName
wordmeans
获取空值

有人有办法吗?提前谢谢

使用

[[segue destinationViewController] setWordMeaning:meaningString];
[[segue destinationViewController] setWordName:wordTapped];
问题是您正在创建
detailView

使用的新对象

[[segue destinationViewController] setWordMeaning:meaningString];
[[segue destinationViewController] setWordName:wordTapped];

问题是您正在创建
detailView

的新对象,如果您在
testingViewController
detailView
之间有一个故事板段,那么在
testingViewController
Prepareforsgue:
方法中,您应该更改行

detailView *dVw = [[detailView alloc] init]; 

另外,我建议您在
detailView.h
文件中更改

@property (nonatomic, assign) NSString *YOUR_STRING; 


如果在
testingViewController
detailView
之间有一个故事板序列,则在
testingViewController
prepareForSegue:
方法中,您应该更改行

detailView *dVw = [[detailView alloc] init]; 

另外,我建议您在
detailView.h
文件中更改

@property (nonatomic, assign) NSString *YOUR_STRING; 


将NSString设置为保留属性,而不是分配属性。此外,当您更改其值时,请始终使用

self.property = ...;

以便进行保留。否则,它将被释放,您将获得null或错误访问。

将NSString设置为保留属性,而不是分配属性。此外,当您更改其值时,请始终使用

self.property = ...;

以便进行保留。否则,它将被释放,您将获得null或错误访问。

创建自定义init方法

declare in .h file 

    -(id)initWithWordName:(NSString*)myWordName andWordMeaning:(NSString*)myWordMeaning;

    and in .m file

    -(id)initWithWordName:(NSString*)myWordName andWordMeaning:(NSString*)myWordMeaning
    {
       self = [super init];
       if(self)
       {
         self.wordName = myWordName;
         self.wordMeaning = myWordMeaning;
       }
       return self;
    }

而且NSString属性应该是copy而不是assign,在detail.h文件中进行更改

创建自定义init方法

declare in .h file 

    -(id)initWithWordName:(NSString*)myWordName andWordMeaning:(NSString*)myWordMeaning;

    and in .m file

    -(id)initWithWordName:(NSString*)myWordName andWordMeaning:(NSString*)myWordMeaning
    {
       self = [super init];
       if(self)
       {
         self.wordName = myWordName;
         self.wordMeaning = myWordMeaning;
       }
       return self;
    }

而且NSString属性应该是copy而不是assign,在您的detail.h文件中进行更改

我为在类之间共享数据而编写的。我希望它对您有用。

我是为在类之间共享数据而写的。我希望它对您有用。

是的,我已经按照您提到的那样做了,但它不再工作。控制台显示空值。Inder是正确的,这样它将创建新的DetailView对象谢谢您的答复。我还需要一个帮助,我的部署目标是iOS 3.0+,因此我可能不会使用此segue功能或任何其他代码来替换此功能,以便它在iOS 3.0+设备上工作。提前谢谢!检查此链接谢谢该链接“我帮了我很多。是的,我已经按照您提到的做了,但它不再工作控制台显示空值。Inder是正确的,这样它将创建新的DetailView对象谢谢您的答复。我还需要一个帮助,我的部署目标是iOS 3.0+,因此我可能不会使用此segue功能或任何其他代码来替换此功能,以便它在iOS 3.0+设备上工作。提前谢谢!检查此“谢谢”链接“我帮了我很多。我还需要一个帮助,我的部署目标是iOS 3.0+,因此我可能不会使用此segue功能或任何其他代码来替换此代码,以便它在iOS 3.0+设备上工作。提前谢谢!您不能针对使用
框架的
iOS
的较低版本,也不能针对适用于较高版本
iOS的
API
我还需要一个帮助,我的部署目标是iOS 3.0+,因此我可能不会使用此segue功能或任何其他代码来替换此代码,以便它可以在iOS 3.0+设备上工作。提前谢谢!您不能针对较低版本的
iOS
,它使用
框架
API
,后者可用于较高版本的
iOS
请参见:请参见: