2016-02-26 4 views
1

Я написал и приложение в swift, у которого есть контроллер вида, который я изменяю в нем некоторые настройки, например: все метки контроллеров и заголовки будут меняться. , но моя проблема заключается в том, что я меняю настройки приложения, которые храню их в основных данных, и я использую кнопку панели навигации, чтобы вернуться к контроллеру родительского представления, когда я извлекаю данные из основных данных. Я ничего не получаю от тех же данных! но настройки контроллера просмотра, когда я иду к нему снова, он загружает правильные данные! И если я закрою приложение и снова его открою, приложение загрузит правильные данные! Итак, мой вопрос в том, как я могу программно перезагрузить или перезапустить первый контроллер просмотра или все приложение?Как обновить или перезагрузить данные приложения в swift 2

для лучшего понимания моего вопроса ниже - мой родительский контроллер представления, содержащий панель навигации.

Код:

import UIKit 
import AVKit 
import AVFoundation 
import CoreData 

class playVideo: UIViewController { 

    //data source 
    var languageDB = [NSManagedObject]() 
    let managedContext = AppDelegate().managedObjectContext 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.navigationItem.hidesBackButton = true 
     change_language() 
    } 

    override func viewDidLayoutSubviews() { 
     self.view.setNeedsDisplay() 
    } 



    override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 
    change_language() 
} 



    func change_language(){ 
     Insert("فارسی")//insert default language 
     fetch("Language") 
     let Language = languageDB[0] 
     let row_value : String = Language.valueForKey("lang") as! String 

     if(row_value == "فارسی"){ 
      self.navigationItem.title = "پخش زنده تصاویر از حرم مطهر رضوی" 
      self.navigationItem.backBarButtonItem?.title = "صفحه اصلی" 
     }else if(row_value == "English"){ 
      self.navigationItem.title = "Live broadcast from razavi holy shrine" 
      self.navigationItem.backBarButtonItem?.title = "Main Page" 
     }else if(row_value == "العربية"){ 
      self.navigationItem.title = "لايف صور من مقام رضوي" 
      self.navigationItem.backBarButtonItem?.title = "صفحةابتدائي" 
     } 
    } 


    //Insert Function 
    func Insert(lang : String) { 
     let check_empty = entityIsEmpty("Language") 
     if(check_empty != true){ 

      let saveLanguage = NSEntityDescription.insertNewObjectForEntityForName("Language", inManagedObjectContext: managedContext) 

      // add our data 
      saveLanguage.setValue(lang, forKey: "lang") 

      //2 
      do { 
       try managedContext.save() 
       //3 
       languageDB.append(saveLanguage) 

      } catch let error as NSError { 
       print("Could not save \(error), \(error.userInfo)") 
      } 


     }//end of check empty if 
    } 

    //fetch Functions 
    func fetch(entity: String){ 
     let langfetch = NSFetchRequest(entityName: entity) 

     do{ 
      let results = try managedContext.executeFetchRequest(langfetch) 
      languageDB = results as! [NSManagedObject] 

     }catch{ 
      fatalError("bad things happend \(error)") 
     } 

    } 

    //check entity is empty Function 
    func entityIsEmpty(entity: String) -> Bool 
    { 

     let request = NSFetchRequest(entityName: entity) 

     do{ 
      let results = try managedContext.executeFetchRequest(request) 
      languageDB = results as! [NSManagedObject] 

     }catch{ 
      fatalError("Cant handel entity \(error)") 
     } 

     if languageDB.count != 0 
     { 
      return true 
     } 
     else 
     { 
      return false 
     } 


    } 


    func Refresh() { 
     // Do some reloading of data and update the table view's data source 
     // Fetch more objects from a web service, for example... 

     self.dismissViewControllerAnimated(true, completion: nil) 
     self.navigationController!.dismissViewControllerAnimated(true, completion: nil) 
     navigationController!.popViewControllerAnimated(true) 
     self.navigationItem.hidesBackButton = true 
     change_language() 
    } 

} 
+0

Не используйте буквы названия 'Insert' и' Refresh'. Это делает ваш код чрезвычайно нечитаемым. –

+0

@TimVermeulen Спасибо за отзыв – anonymox

ответ

2

Попробуйте обновить ваш контроллер представления приложения вместо или перезагрузки или перезапуск приложения

func reNew(){ 
     //reload application data (renew root view) 
     UIApplication.sharedApplication().keyWindow?.rootViewController = storyboard!.instantiateViewControllerWithIdentifier("Root_View") 
    } 

Root_View является вид прода ролик, который вы хотите обновить, вы можете установить идентификатор для своих контроллеров просмотра в инспекторе идентификации.

0

Чтобы получить доступ к приложению делегата, вы не должны создавать новый с AppDelegate(), но вместо этого вы должны получить ссылку на текущий. Вы можете сделать это с помощью

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
let managedContext = appDelegate.managedObjectContext 

Редактировать: Сказав это, я действительно не буду использовать Core Data для такой задачи. Вам гораздо лучше использовать NSUserDefaults.

+0

Когда я меняю делегат приложения на свой метод, я получаю член экземпляра 'appDelegate' не может использоваться в сообщении об ошибке типа playPideo. – anonymox

0


Попробуйте один

Если ваш успешно установлен, и извлечение данных из основных данных, вы должны поставить вас и вызов функции
change_language() в viewWillAppear() метод и удалить обновления() метод

Это может помочь вам

+0

Я обновил свой код до того, что вы сказали, но результата нет! методы извлечения и вставки работают отлично, но не знают, почему это не освежает! – anonymox

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

  • Нет связанных вопросов^_^