无法在 UIViewController 中设置 NSString 属性

Posted

技术标签:

【中文标题】无法在 UIViewController 中设置 NSString 属性【英文标题】:Can't set NSString property in UIViewController 【发布时间】:2013-10-21 22:16:59 【问题描述】:

我不确定这里发生了什么,但我无法将字符串传递到正在推送到 NavigationController 的视图中。

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
InventoryInquiryViewController *listViewController = (InventoryInquiryViewController *)[storyboard instantiateViewControllerWithIdentifier:@"InventoryList"];

[listViewController setItemBalanceRecords: self.itemBalanceRecords];  //this is an NSMutableArray and it works
[listViewController setItemNumber: @"Not Working!"]; //this is an NSString and it remains nil
[self.navigationController pushViewController:listViewController animated:YES];

因此,即使我指定了字符串文字,通过尝试设置简单的字符串属性来传递数组也可以正常工作。我对这个没有想法。

编辑:

我已更新代码以消除与描述相关的问题。当我试图设置几个字符串值时,代码被缩短了。修改后的代码仍然显示相同的行为。

编辑:

它们被声明为如下属性:

@property (nonatomic, strong) NSArray *itemBalanceRecords;
@property (nonatomic, strong) NSString *itemNumber;

该应用仅供企业内部使用,仅支持 ios7。

【问题讨论】:

确保你@syntetize 只需将description 重命名为itemDescription 是的,不要使用“描述”作为属性名称。 代码已更新以消除描述相关的问题。同样的问题仍然存在。 我们可以有.h 和.m 文件的代码,您可以在其中定义ItemBalanceRecords,ItemNumber 字符串。 【参考方案1】:

尝试将属性从描述重命名为其他名称。描述是一个NSObject 属性(它是UIViewController 的超类),拥有一个同名的属性可能会导致您描述的奇怪行为。

【讨论】:

【参考方案2】:

description 是所有 NSObject 子类的方法,所以你不应该将它用于你自己的需要 https://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/Protocols/NSObject_Protocol/Reference/NSObject.html#//apple_ref/occ/intfm/NSObject/description

【讨论】:

以上是关于无法在 UIViewController 中设置 NSString 属性的主要内容,如果未能解决你的问题,请参考以下文章

在导航控制器内的 UIViewController 中设置背景

在 NSObject 类中设置协议并在 UIViewController 类中调用它们

键盘显示时在 UIViewController 中设置 Tableview y 位置

UIView 子类在 Swift 中设置自己的高度 + UIViewController 中的约束 + 情节提要

如何在没有情节提要的 Xamarin.iOS UIViewController 中设置 RestorationClass?

如何在 Swift 中设置图像按钮