[英]How to refresh or reload app data in swift 2
I wrote and app in swift which it has a view controller which I change some settings in it, for example : all view controllers labels and titles will change. 我迅速编写了一个应用程序,其中有一个视图控制器,可以更改其中的一些设置,例如:所有视图控制器的标签和标题都会更改。 but my problem is when I change the app settings which I store them in core data and I use navigation bar button to get back to the parent view controller when I fetch from core data I get nothing still the same data!
但是我的问题是,当我更改将其存储在核心数据中的应用程序设置时,当我从核心数据中获取内容时,我使用导航栏按钮返回到父视图控制器时,仍然无法获得相同的数据! but settings view controller when I go to it again it loads the right data!
但是当我再次进入设置视图控制器时,它将加载正确的数据! And if I close the app and reopen it, the app loads the correct data!
如果我关闭应用程序并重新打开它,则该应用程序将加载正确的数据! So my question is how can I reload or relaunch the first view controller or entire app programmatically ?
所以我的问题是如何以编程方式重新加载或重新启动第一个视图控制器或整个应用程序?
for better understanding of my question below is my parent view controller which contains navigation bar. 为了更好地理解我的问题,以下是包含导航栏的父视图控制器。
Code : 代码:
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()
}
}
Try renew your app view controller instead or reload or relaunching the app 尝试改为更新您的应用程序视图控制器,或者重新加载或重新启动应用程序
func reNew(){
//reload application data (renew root view )
UIApplication.sharedApplication().keyWindow?.rootViewController = storyboard!.instantiateViewControllerWithIdentifier("Root_View")
}
Root_View is the view controller which you want it to renew, you can set identifier for your view controllers in identity inspector. Root_View是要更新的视图控制器,您可以在身份检查器中为视图控制器设置标识符。
To access your app delegate, you shouldn't create a new one with AppDelegate()
, but instead you should get a reference to the current one. 要访问您的应用程序委托,您不应使用
AppDelegate()
创建一个新的委托,而应获取对当前委托的引用。 You can do this with 你可以用
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext
Edit: Having said that, I really wouldn't use Core Data for a task like this. 编辑:话虽如此,我真的不会将Core Data用于此类任务。 You're much better off using
NSUserDefaults
. 使用
NSUserDefaults
会更好。
Try this one 试试这个
If your are successfully inserted and fetching data from Core data, you should put you function call 如果您已成功插入并从Core数据中获取数据,则应将函数调用
change_language()
in viewWillAppear() method and remove refresh() method change_language()
在viewWillAppear中()方法和除去刷新()方法
It may help you 可能对你有帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.