是否可以在代码中对IBActions和IBOutlets 进行硬编码,而不是在Interface Builder中拖动它们?
我的应用程序的RootViewController有问题.当我运行应用程序时,我收到此错误.这意味着什么?
NSUnknownKeyException', reason: '[<UIApplication 0x8634010> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key bigImageView.'
First throw call stack:
(0x1992012 0x1357e7e 0x1a1afb1 0xe04711 0xd85ec8 0xd859b7 0xdb0428 0x4bc0cc
0x136b663 0x198d45a 0x4babcf 0x4bc98d 0x29eceb 0x29f002 0x29ded6 0x2af315 0x2b024b
0x2a1cf8 0x1dbedf9 0x1dbead0 0x1907bf5 0x1907962 0x1938bb6 0x1937f44 0x1937e1b 0x29d7da 0x29f65c 0x2c6d 0x2b95)
libc++abi.dylib: terminate called throwing an exception
Run Code Online (Sandbox Code Playgroud)
我在RootViewController.h中的代码
#import <UIKit/UIKit.h>
@interface RootViewController : UIViewController <UIGestureRecognizerDelegate>{
}
@property (nonatomic, copy)IBOutlet UIImageView * bigImageView;
@property (nonatomic, assign)BOOL fromRootViewController;
- (void)handleTap:(UITapGestureRecognizer *)recognizer;
@end
Run Code Online (Sandbox Code Playgroud)
我在RootViewController.m中的代码 …
IBOutlet(连接)可能是nil什么原因?
nil即使我从头开始重新创建所有内容(声明和控制),我总是有一个may应用程序.
我在Interface Builder的一个视图中有30个按钮.每个都有一个不同的标签介于100001和100030之间.我发现每个按钮使用相同的动作很容易,按下每个按钮传递标签,并使用代码决定加载哪个级别.
我想将所有按钮连接到单个IBOutlet,但每个按钮根据用户保存的数据和按钮的标签加载不同的图像.
我该怎么做呢?
可以像这样创建出口
@interface SearchViewController : UIViewController<UISearchBarDelegate> {
IBOutlet UIView *viewSearchBar;
IBOutlet UIScrollView *scrollVieww;
IBOutlet UILabel *lblName;
}
Run Code Online (Sandbox Code Playgroud)
也喜欢这个
@interface SearchViewController : UIViewController<UISearchBarDelegate> {
}
@property(nonatomic, weak) IBOutlet UIScrollView *scrollVieww;
@property(nonatomic, weak) IBOutlet UIView *viewSearchBar;
@property(nonatomic, weak) IBOutlet UILabel *lblName;
@end
Run Code Online (Sandbox Code Playgroud)
我知道nonatomic/ atomic strong/ weak在ARC,但在第一个例子中它们是什么?strong,weak,nonatomic或atomic.
请解释或链接我的一些细节.
我正在为我的Swift项目设置单元测试,并且无法测试涉及更新IBOutlets的类函数.
我有一个函数validateUrl,它希望传递一个字符串,然后验证它.如果它有效,则启用UIButton,如果它无效,则禁用UIButton.当我运行调用此函数的测试时,应用程序在启用或禁用UIButton的代码行上崩溃.故事板和控制器都具有适当的测试目标集.
这行代码:
self.submitButton.enabled = true// Enable Submit Button
Run Code Online (Sandbox Code Playgroud)
吐出这个错误:
fatal error: unexpectedly found nil while unwrapping an Optional value
Run Code Online (Sandbox Code Playgroud) 我无法为我创建的文本字段设置引用插座.我试图通过Ctrl-Drag来做到这一点.任何人都可以建议吗?我已将委托设置为视图控制器.一般情况下,我只有一个视图,其中填充了一些文本字段,我已经为ViewController.h编写了以下代码,这是我正在尝试设置为引用插座的:
@property (weak, nonatomic) IBOutlet UITextField *userIDText;
Run Code Online (Sandbox Code Playgroud) 我今天试图从Obj-C开始到Swift,我正在阅读文档.我试图在Swift中创建一个简单的IBOutlet,它不断给我这些错误.
View Controller has no initialiser
必需的init(编码器aDecoder:NSCoder){fatalError("init(编码器:)尚未实现")}
IBOutletproperty has non-optional type 'UILabel'
并且不断弹出这段代码:
@IBOutlet var outputLabel : UILabel
但是当我添加一个!标记,它运行没有错误,如此
@IBOutlet var outputLabel : UILabel!
同样的事情发生在IBActions上......
我正在UIViewController从一个捆绑中加载一个initWithNibName:bundle:.如果我在其中设置断点,viewDidLoad我可以看到它view已设置.About.xib在Interface Builder中查看时,我也可以看到这一点.
然而,一旦视图实际上第一次使用([self.navigationController pushViewController:viewController animated:YES]根据我的应用程序的逻辑调用)我收到此错误:
*由于未捕获的异常'NSInternalInconsistencyException'终止应用程序,原因:' - [UIViewController _loadViewFromNibNamed:bundle:]加载了"关于"笔尖,但未设置视图插座.
这也是触发的调用viewDidLoad.因此,显然在通话期间,view首先是非零(应该是),后来显然再次变为零.
如果我po [viewController view]在调用之前立即键入调试器,我会收到此错误(可能只是另一个相同症状的表示):
错误:执行被中断,原因:内部ObjC异常断点(-3)..进程已返回到表达式求值之前的状态.
如何在不遇到这些错误的情况下将视图控制器与现有导航栏一起加载和使用?
更新如果我从故事板(不一定是我的主要故事板)而不是从XIB文件加载视图控制器,问题显然会消失.
我确实进行了搜索,发现了很多约定,但没有一个谈论 IBOutlet。
我应该使用以下哪一项?
@IBOutlet weak var price: UITextField!
@IBOutlet weak var priceTextField: UITextField!
@IBOutlet weak var textFieldPrice: UITextField!
@IBOutlet weak var tfPrice: UITextField!
Run Code Online (Sandbox Code Playgroud) iboutlet ×10
ios ×7
objective-c ×5
swift ×3
xcode ×2
bundle ×1
cocoa ×1
cocoa-touch ×1
exception ×1
ibaction ×1
properties ×1
unit-testing ×1
xcode6 ×1