2015-05-12 2 views
0

Когда мое приложение впервые запустилось, я хочу создать некоторые образцы данных, которые будут видеть новые пользователи. Я хотел бы, чтобы они начали уровень (возможно больше) в навигационном контроллере, например, так:Заполнение навигационного контроллера при первом запуске

tableViewController0 -> tvc1 (пользователь начинает здесь)

Изображение приложение отмечает, что имеет папки как ее верхний уровень навигации. Сначала вы можете сначала показать пользователю несколько примеров заметок в папке с образцом, а затем позволить ему вернуться позже и создать новые папки.

Моя мысль была, что я бы запустить метод в application didFinishLaunchingWithOptions, что бы проверить для первого запуска (проверка/установив Bool в NSUserDefaults), а затем, если мы находимся в первом запуске, создать некоторые выборочные данные. Тогда я думал, что я мог бы просто создать каждый контроллер представления и установить мой UINavigationController «S viewControllers собственности, но я получаю эту ошибку:

'NSInternalInconsistencyException', reason: 'unable to dequeue a cell with identifier Cell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'

(Клетка определенно имеет идентификатор Cell в раскадровке и работает, если я не» т создавать данные и просматривать контроллеры заранее)

Некоторые примеры кода из моей AppDelegate:.

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    // From Xcode's stock AppDelegate 
    // Override point for customization after application launch. 
    let splitViewController = self.window!.rootViewController as! UISplitViewController 
    let navigationController = splitViewController.viewControllers[splitViewController.viewControllers.count-1] as! UINavigationController 
    navigationController.topViewController.navigationItem.leftBarButtonItem = splitViewController.displayModeButtonItem() 
    splitViewController.delegate = self 

    let masterNavigationController = splitViewController.viewControllers[0] as! UINavigationController 

    // Check for first launch, get back a sample object. 
    if isFirstLaunch == true { 
     let newObject = prepareFirstLaunch() 

     let tvc0 = TableViewController0() 
     tvc0.managedObjectContext = managedObjectContext 

     let tvc1 = TableViewController1() 
     tvc1.someObject = newObject 

     masterNavigationController.viewControllers = [tvc1, tvc0] 
    } else { 
     // this is moved from the stock AppDelegate down into this else statement. 
     let controller = masterNavigationController.topViewController as! TableViewController0 
     controller.managedObjectContext = self.managedObjectContext 
    } 

    return true 
} 

private func isFirstLaunch() -> Bool { 
    // return whether we're launching for the first time 
} 

private func prepareSampleObject() -> SomeObject { 
    /* 
    If we're launching for the first time 
    create someObject, create some other objects that are owned 
    by this object in CoreData, set up their relationships, etc. 
    */ 

    return someObject 
} 

есть еще один способ, которым я могу установить это, так что пользователь может перейти прямо в населенной на вместо того, чтобы начинать на верхнем уровне?

ответ

0

Вы используете раскадровки, что означает, что у вас есть контроллер начального вида.

Сделайте этот контроллер начального вида a UINavigationController, у которого rootViewController - это SetupViewController, где вся логика проверки. Покажите UIActivityIndicatorView в нем или любую другую загрузку анимации. Затем, в зависимости от того, что вы нашли, нажмите либо экран фиктивных заметок, либо экран верхнего уровня папки.

В раскадровке вы создадите два перехода от SetupViewController - один к заметкам, один к папке. Дайте каждому свое собственное имя. Вы вызываете performSegueWithIdentifier в код, в котором вы определяете, какой экран нажимается.

Смежные вопросы