0

我在基于故事板的 XCode 项目中遇到了一个奇怪的问题,其中我视图中的 UITextFields 插座在运行时为空(即调试时它们在本地窗口中的指针值显示为“0x00000000”)。UIViewController 上的委托方法可以正常调用,并且“sender”参数是有效对象,但“self”中同一字段的属性是空指针。以下是我在调试器中闯入的委托代码示例。

(BOOL) textFieldShouldReturn:(UITextField *) sender {
    // sender is '0x7812...', but self.txtUserName is '0x0000...'
    if(sender == self.txtUserName)
    ....

我开始怀疑我一定做错了什么,但我开始了另一个基于故事板的项目,添加了一个文本字段,将它全部连接起来......并且它起作用了。回到我的项目,添加了一个文本字段,把它全部连接起来......仍然是'0x00000000'。

关于什么可能导致这种事情发生的任何想法?

编辑:这似乎发生在我添加的任何新视图对象上;我刚刚尝试添加第二个 UIButton 并且它有同样的问题;我添加的第一个按钮很好。所以在某些时候,添加/链接视图对象时,事情已经开始崩溃了。

第二次编辑:我刚刚开始了一个新项目并将文件添加到其中。到目前为止,一切都很好。

4

2 回答 2

0

这可能是一个很晚的答案......但是无论出于何种原因,同样的事情发生在我身上......(我使用的是xcode 5)。玩了一会儿之后,我注意到调试器会说_UITextFielVariable 0x00000000始终是头文件中的第一个UITextField 变量。

@interface ViewController : UIViewController
@property (strong, nonatomic) IBOutlet UITextField *vehicleType;
@property (strong, nonatomic) IBOutlet UITextField *trackType;
@property (strong, nonatomic) IBOutlet UITextField *massBase;

这里的“vehicleType”总是会出现这个问题,但是,我所做的只是添加一个与任何东西(如标签、文本、按钮等)没有关联的虚拟变量,就像这样

@interface ViewController : UIViewController
@property (strong, nonatomic) IBOutlet UITextField *extra;
@property (strong, nonatomic) IBOutlet UITextField *vehicleType;
@property (strong, nonatomic) IBOutlet UITextField *trackType;
@property (strong, nonatomic) IBOutlet UITextField *massBase;

并且运行代码有效......我真的不知道为什么,如果有人能让我知道那会很棒。

我也在回答这个问题,以防其他人正在寻找这个答案并落在这个踏板上:)

于 2014-01-17T15:50:43.470 回答
0

当我在重新设计后推送带有故事板 ID 的视图控制器时遇到了这个问题。

我做了一个简单的屏幕,分配了一个故事板ID,写了一些代码等等。

然后我重新设计了屏幕,重写了代码,最初使用 segues,但最终使用 storyboard-id 以编程方式推送 vc。由于情节提要 id 对应于重构的类,但在其他屏幕上,调用了正确的代码,但没有初始化任何出口

因此,如果您使用 storyboard-id 加载屏幕,请仔细检查该值是否与您期望的屏幕相对应..

于 2014-09-29T19:47:46.257 回答