我有一个使用StoryBoards的项目,并UISearchDisplayController在a的上下文中使用UINavigationController,它出现在根视图控制器中.当我将一个新的视图控制器推入堆栈并导致模拟内存警告(或实际上得到一个低内存警告).上一个视图控制器成功卸载其视图.但是,当我从堆栈中弹出第二个视图控制器时,我得到了一个EXC_BAD_ACCESS.我打开了NSZombies并发现了这个:
[UISearchDisplayController retain]:发送到解除分配的实例0xb13aa30的消息
我不是(至少在我的代码中)将该消息发送给UISearchDisplayController.用编程方式说,我没有做任何事情.断点显示我甚至没有进入viewDidLoad第一个视图控制器.
但是好奇的是:对于笑声和咯咯笑声,我决定彻底retain改变我的SDC viewDidLoad,只是为了看看会发生什么,不会发生崩溃.但是,我的UISearchDisplayController实例是nil.
我做了一个回溯并得到了这个输出:
#0 0x01e30e1e in ___forwarding___ ()
#1 0x01e30ce2 in __forwarding_prep_0___ ()
#2 0x01dd1490 in CFRetain ()
#3 0x01eb69c0 in +[__NSArrayI __new::] ()
#4 0x01e0a00a in -[__NSPlaceholderArray initWithObjects:count:] ()
#5 0x01e34f52 in +[NSArray arrayWithObjects:count:] ()
#6 0x01e5e084 in -[NSDictionary allValues] ()
#7 0x01035272 in -[UINib instantiateWithOwner:options:] ()
#8 0x00edce2c in -[UIViewController _loadViewFromNibNamed:bundle:] ()
#9 0x00edd3a9 in -[UIViewController loadView] …Run Code Online (Sandbox Code Playgroud) 当我使用我的应用程序一段时间后,我收到以下错误.通常需要50到100次动作才能导致坠机.虽然我正在使用故事板,但我没有理解它,这是一个NIB错误.
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason:
'Could not load NIB in bundle: 'NSBundle
</Users/me/Library/Application Support/iPhone Simulator/5.0/Applications/GUID/appname.app>
(loaded)' with name 'MainStoryboard_iPhone.storyboardc/q8p-MH-tsT-view-acD-hJ-g0C''
Run Code Online (Sandbox Code Playgroud)
我不是100%肯定从哪里开始寻找,但我认为这意味着故事板是腐败的?
我查看了我的所有源代码,并且我没有任何字符串"nib",因此没有nibWithNibName调用等.我也没有MainWindow.xib,虽然我尝试创建一个.我不确定在使用故事板时是否可以将其设置为主界面.但.xcodeproj/project.pbxproj文件中有一个.nib引用:
/* Begin PBXBuildRule section */
148BDD4C14AE8D5E002C30ED /* PBXBuildRule */ = {
isa = PBXBuildRule;
compilerSpec = com.apple.compilers.proxy.script;
fileType = wrapper.nib;
isEditable = 1;
outputFiles = (
);
script = "$(DEVELOPER_BIN_DIR)/ibtool\n";
};
Run Code Online (Sandbox Code Playgroud)
我在Xcode 4.2中使用故事板.我的主要故事板设置为MainStoryboard_iPhone,其文件名为MainStoryboard_iPhone.storyboard.
崩溃发生在iOS 5模拟器中.
我试图在UILabel上显示带有粗体黑色字体和大小50的数字.
经过一些失败的尝试后,我才意识到无论我将字体设置为什么颜色,它总是设置为lightGray.除了下面我还需要做些什么吗?
[DisplayLabel setFont:[UIFont fontWithName:[NSString stringWithUTF8String:"HelveticaNeue-Bold"] size:50]];
DisplayLabel.textColor = [UIColor brownColor];
DisplayLabel.textAlignment = NSTextAlignmentCenter;
Run Code Online (Sandbox Code Playgroud)
我正在使用故事板将标签添加到视图中.
我有一个视图控制器,使用故事板segue在弹出框中显示.
在呈现视图控制器中,我有以下代码:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let svc = segue.destinationViewController as? SettingsViewController {
svc.popoverPresentationController?.delegate = self
}
}
Run Code Online (Sandbox Code Playgroud)
然而,事实证明,所呈现的视图控制器,即使它显示为酥料饼,具有modalPresentationStyle的'.Modal,因此一个nil popoverPresentationController.奇怪的!
所以,我更新了代码如下:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let svc = segue.destinationViewController as? SettingsViewController {
svc.modalPresentationStyle = .Popover
svc.popoverPresentationController?.delegate = self
}
}
Run Code Online (Sandbox Code Playgroud)
该svc.popoverPresentationController代表现在设置好了,但如果酥料饼是由用户解雇攻外,没有任何的UIPopoverPresentationControllerDelegate委托方法(如popoverPresentationControllerShouldDismissPopover被调用.我在想什么?
我可以从故事板设置背景图像吗?我在代码中设置了背景:
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor(patternImage: UIImage(named: "background.png"))
}
Run Code Online (Sandbox Code Playgroud) 我完全重新制定了这个问题,因为我知道我原本偏离轨道但是让我无法解决问题.参考这张图片......

我想要在代码中创建或操作segue(以黄色突出显示),以便主视图是MFMasterViewController(以红色突出显示)的多个子类中的任何一个.
做这个时使用笔尖我可以创建一个笔尖,SharedNib.xib和设置类的MFMasterViewController,然后创建我的子类,比方说MFMasterViewControllerSubclassA,MFMasterViewControllerSubclassB等和然后实例化我想要使用哪个子...
MFMasterViewControllerSubclassA *controller = [[MFMasterViewControllerSubclassA alloc] initWithNibName:@"SharedNib" bundle:nil];
Run Code Online (Sandbox Code Playgroud)
要么...
MFMasterViewControllerSubclassB *controller = [[MFMasterViewControllerSubclassB alloc] initWithNibName:@"SharedNib" bundle:nil];
Run Code Online (Sandbox Code Playgroud)
等等
关于如何使用故事板来解决这个问题的任何线索?
在我的情况下,想要这样做的原因是我的所有子类都是相同的tableview和数据,但排序方式不同,并且对于写入cels详细文本的内容有所不同.我怀疑这是一种并不罕见的模式.
干杯和TIA,佩德罗:)
根据苹果的文档在这里,我们应该能够通过连接网点页面视图控制器加入到故事板,然后选择设置数据源.
使用故事板创建页面视图控制器界面
基于页面的应用程序Xcode模板创建一个新的项目,其中页面视图控制器作为初始场景.
要将页面视图控制器添加到现有故事板,请执行以下操作:
- 将页面视图控制器拖出库.将页面视图控制器场景添加到故事板.
- 在"属性"检查器中,设置适当的选项.
- (可选)通过连接相应的插座来设置委托,数据源或两者.
- 通过在"属性"检查器中选择"是初始视图控制器"选项(或以其他方式在用户界面中显示视图控制器)将其显示为第一个视图控制器.
然后我像这样定义了一个UIPageViewController子类
@interface DetailsPageViewController : UIPageViewController <UIPageViewControllerDataSource>
Run Code Online (Sandbox Code Playgroud)
但是当我尝试连接数据源插座时,它不会突出显示控制器或允许连接它.我也试过在其他控制器上实现UIPageViewControllerDataSource,但我有同样的问题,无法连接插座.
有人可以帮忙吗?
objective-c interface-builder uistoryboard uipageviewcontroller
我有一个自定义的UIView子类,它在初始化过程中以编程方式添加子视图.我希望这个子视图与自定义UIView的宽度相同.
如果我以编程方式添加自定义UIView,我的代码工作正常.但是,当通过StoryBoard初始化UIView时,我无法获得自定义UIView的宽度.
// Init programatically
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
NSLog (@"view: %f", self.frame.size.width); //WILL return width
NSLog (@"view: %f", self.bounds.size.width); //WILL return width
}
return self;
}
// Init from storyboard
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
NSLog (@"view: %f", self.frame.size.width); //Returns 0
NSLog (@"view: %f", self.bounds.size.width); //Returns 0
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
当initWithCoder:由StoryBoard运行时,UIView的框架和边界都返回为0.有没有办法在 initWithCoder 中访问UIView的尺寸?或者,至少在调用drawRect:之前访问维度?
谢谢.
我想知道当前加载的故事板是什么,我使用下面的代码,但它仍然是我的主故事板而不是当前.
//This get me the Main storyboard
[[NSBundle mainBundle].infoDictionary objectForKey:@"UIMainStoryboardFile"];
Run Code Online (Sandbox Code Playgroud) 我必须为新iPad实现分屏功能,我从Apple的doc获得了一个解决方法,以支持我的应用程序:https://developer.apple.com/library/prerelease/ios/documentation/WindowsViews/Conceptual/AdoptingMultitaskingOniPad /QuickStartForSlideOverAndSplitView.html#//apple_ref/doc/uid/TP40015145-CH13-SW1
在本文档中,请检查第2点:
提供LaunchScreen.storyboard文件(而不是像iOS 7及更早版本中那样的.png图像文件)
这就是我必须使用Launch screen.storyboard的原因.现在,拆分工作完美,但对于我的应用程序,我有单独的启动屏幕,默认纵向和默认景观.但是现在我已经采用了故事板,我无法为不同的方向定制启动屏幕.甚至我无法在Launch屏幕中编写相同的代码,否则它会给我错误.
此外,我尝试使用大小类为两个方向提供单独的图像视图,但我没有成功.
如果有人建议我如何使用不同的图像实现风景和肖像的Launch screen.storyboard,那将是很有帮助的.
uistoryboard ×10
ios ×7
iphone ×3
objective-c ×3
ipad ×1
segue ×1
storyboard ×1
uifont ×1
uilabel ×1
uiview ×1
xcode ×1