任何人都知道为什么这个根View Controller's viewDidLoad在发布时被调用了两次?这让我疯了!
这是第一次到第一次的堆栈跟踪viewDidLoad:
#0 0x0000276a in -[RootViewController viewDidLoad] at RootViewController.m:71
#1 0x3097548f in -[UIViewController view]
#2 0x00002734 in -[RootViewController initWithCoder:] at RootViewController.m:39
#3 0x30ab5ce4 in -[UIClassSwapper initWithCoder:]
#4 0x30514636 in _decodeObjectBinary
#5 0x30514035 in _decodeObject
#6 0x30ab5a1d in -[UIRuntimeConnection initWithCoder:]
#7 0x30514636 in _decodeObjectBinary
#8 0x30515f27 in -[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:]
#9 0x305163b0 in -[NSArray(NSArray) initWithCoder:]
#10 0x30514636 in _decodeObjectBinary
#11 0x30514035 in _decodeObject
#12 0x30ab4dde in -[UINib instantiateWithOptions:owner:loadingResourcesFromBundle:]
#13 0x30ab6eb3 in -[NSBundle(NSBundleAdditions) loadNibNamed:owner:options:]
#14 0x308f85f1 in …Run Code Online (Sandbox Code Playgroud) viewDidLoad()和LoadView()有什么区别?它们以何种方式彼此不同?
在不使用XIB开发应用程序时哪一个更好?
谢谢 .
是否有BOOL或其他方式知道viewDidLoad:是否已被调用?
每次我的视图进入活动状态时,我都需要更改视图属性,但如果视图尚未加载,我不想过早地触发viewDidLoad:.如果没有方法轻易告诉viewDidLoad:是否已被调用,我只需在视图控制器init 中将一个名为loaded set 的BOOL添加到NO,然后在输入active后更改视图属性(如果已加载为YES)或在viewWillAppear中:如果加载为NO,则将加载设置为YES.
我有一个iOS应用程序,我需要知道什么时候新的视图在屏幕上完全可见; 也就是说,当Autolayout完成计算并且视图已完成绘制时.
在视图完全可见之前,ViewDidAppear似乎很好.如果我关闭Autolayout,时间似乎与人类感知一致,但我需要在这个项目中使用Autolayout(所以这不是一个解决方案......只是一个测试).
当Autolayout完成计算时,是否有任何方法可以触发?或者视图实际可见时触发的另一种方法(因为ViewDidAppear不适用于此)?
谢谢!
编辑:这是Xcode 6.4的完整代码示例
我有简单的iOS应用程序没有故事板.我设置rootViewController为UIWindow在AppDelegate.swift这样的:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
let tabBarController = TabBarController()
window = UIWindow(frame: UIScreen.mainScreen().bounds)
window?.rootViewController = tabBarController
window?.makeKeyAndVisible()
return true
}
Run Code Online (Sandbox Code Playgroud)
TabBarController 类的实现如下:
class TabBarController: UITabBarController {
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
// Next line is called after 'viewDidLoad' method
println("init(nibName: bundle:)")
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad() …Run Code Online (Sandbox Code Playgroud) 我试图设置searchBar为tableHeaderView内部viewDidLoad:
override func viewDidLoad() {
super.viewDidLoad()
// SearchController initializiation
self.searchController = UISearchController.init(searchResultsController: nil)
self.searchController.delegate = self
self.searchController.searchBar.delegate = self
self.searchController.searchBar.sizeToFit()
self.searchController.searchResultsUpdater = self
self.searchController.searchBar.barTintColor = UIColor.white
self.searchController.searchBar.keyboardAppearance = .default
self.searchController.searchBar.backgroundColor = UIColor.white
self.searchController.hidesNavigationBarDuringPresentation = true
self.searchController.obscuresBackgroundDuringPresentation = false
self.tableView.tableHeaderView = self.searchController.searchBar
self.definesPresentationContext = true
self.fetch()
self.tableView.reloadData()
}
Run Code Online (Sandbox Code Playgroud)
这是我的fetch()功能:
func fetch() {
let fetchRequest:NSFetchRequest<Phone> = Phone.fetchRequest()
fetchRequest.sortDescriptors = [NSSortDescriptor.init(key: "header", ascending: true), NSSortDescriptor.init(key: "date", ascending: true)]
self.fetchedResultsController = NSFetchedResultsController.init(fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext, sectionNameKeyPath: …Run Code Online (Sandbox Code Playgroud) 我一直在四处寻找,但遗憾的是没有运气.
我的应用要求用户在首次启动应用时登录/注册.我知道如何确定首次启动(使用NSUserDefaults),但每当我尝试呈现包含登录/注册控件的模式时,都没有任何反应.
这就是我所拥有的:
-(void)viewDidLoad {
[self showLogin];
[super viewDidLoad];
}
-(void)showLogin {
FlipsideViewController *controller = [[FlipsideViewController alloc] initWithNibName:@"AccountView" bundle:nil];
controller.delegate = self;
controller.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentModalViewController:controller animated:YES];
[controller release];
}
Run Code Online (Sandbox Code Playgroud)
然而,没有任何反应.主视图正常加载.任何帮助是极大的赞赏.
-Giles
据我所知,awakeFromNib将始终在viewDidLoad之前调用.
所以我有一个UITableViewController的子类,它是从xib文件中取消归档的.
我在里面定义了这两个方法:
- (void)awakeFromNib {
[super awakeFromNib];
NSLog(@"awake from nib");
}
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"view did load");
}
Run Code Online (Sandbox Code Playgroud)
会发生什么是"视图确实加载"出现在控制台中"从笔尖唤醒"之前.我试图在[超级awakeFromNib]上使用断点,并反复点击F7(Step Into),令我惊讶的是,它进入 - (void)viewDidLoad之前进入awakeFromNib内的第二行.
有谁知道这里发生了什么?我在常规UIViewController的子类中做了完全相同的事情,并且日志语句被反转,正如我最初期望的那样......
我目前UIActivityIndicator在屏幕上出现了一两秒钟.我想将背景设置为灰色,因为它出现在屏幕上,但我不知道该怎么做...
这是我到目前为止初始化指标的方法.
- (void)viewDidLoad
{
//...
activity = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 32.0f, 32.0f)];
[activity setCenter:CGPointMake(160.0f, 208.0f)];
[activity setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleGray];
[self.tableView addSubview:activity];
[activity startAnimating];
[activity performSelector:@selector(stopAnimating) withObject:nil afterDelay:1.0];
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
我试图在第一次加载应用程序时执行segue.我可以在调试器中看到我的打印消息,但Perform Segue不起作用.我没有得到任何错误.有人可以告诉我什么错了吗?
import UIKit
import LocalAuthentication
let isFirstLaunch = UserDefaults.isFirstLaunch()
extension UserDefaults {
// check for is first launch - only true on first invocation after app install, false on all further invocations
// Note: Store this value in AppDelegate if you have multiple places where you are checking for this flag
static func isFirstLaunch() -> Bool {
let hasBeenLaunchedBeforeFlag = "hasBeenLaunchedBeforeFlag"
let isFirstLaunch = !UserDefaults.standard.bool(forKey: hasBeenLaunchedBeforeFlag)
if (isFirstLaunch) {
UserDefaults.standard.set(true, forKey: hasBeenLaunchedBeforeFlag)
UserDefaults.standard.synchronize()
}
return isFirstLaunch
}
}
class …Run Code Online (Sandbox Code Playgroud) viewdidload ×10
iphone ×6
ios ×5
swift ×3
objective-c ×2
autolayout ×1
awakefromnib ×1
cocoa-touch ×1
core-data ×1
init ×1
ipad ×1
loadview ×1
segue ×1
uitableview ×1
xcode ×1