iOS新特性擴充套件之Today分享(2)
1、在上一小節中,我們簡單介紹了Today擴充套件的資料儲存應用,但是對於共享內容比較多的話,單純的用NSUserDefaults儲存還是不夠的,有同學可能會用資料庫之類的儲存方式,但資料庫也是不太簡單的,這裡我們可以用2種方式解決,共享檔案和共享frameWork。
2、共享檔案
(1)首先我們要建立一個swift檔案並寫入程式碼,建立過程就不多說了,
(2)檔案建立完成之後,我們需要把檔案新增到Today target中進行編譯,
(3)新增完成之後,就可以在Today檔案中使用了,
class TodayViewController: UIViewController, NCWidgetProviding {
@IBOutlet weak var labelView: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
let myData = Mydata()
myData.setMyData()
labelView.text = myData.title
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// 更新介面的時候呼叫
func widgetPerformUpdateWithCompletionHandler(completionHandler: ((NCUpdateResult) -> Void)) {
// Perform any setup necessary in order to update the view.
// If an error is encountered, use NCUpdateResult.Failed
// If there's no update required, use NCUpdateResult.NoData
// If there's an update, use NCUpdateResult.NewData
labelView.text = "介面資料更新了"
completionHandler(NCUpdateResult.NewData)
}
}
(4)目前為止,檔案共享就完成了。
3、framework共享
(1)如果要共享的檔案比較多,有可能新增刪除重複在做,就很容易混亂,所以我們還可以利用framework來完成,把需要的檔案製作成framework,這樣的話,就可以只利用framework中的檔案就可以了,對其他的檔案沒有影響。
(2)建立framework
點選target之後會出現下面的介面,
點選next之後,會提示我們輸入framework的名稱,
然後點選完成,我們的framework就建立好了,
(3)配置framework(1)
首先將我們建立的那個檔案從應用target中刪除,
這裡系統會預設吧我們建立的framework新增進去,所以我們不用手動新增,
(4)配置framework(2)
把我們建立的檔案新增到framework中,
這樣的話,我們的framework配置就完成了
(5)使用framework
下面就可以直接使用framework中的檔案了,
首先在ViewController.swift中匯入我們的framework
這裡報了一個錯,是因為我們應用target支援的版本是8.3,framework target支援的版本是9.1,吧版本改成統一的再編譯就可以了。
需要注意的就是,我們需要把MyData.swift中的方法全部改成public,
這樣的話,直接就可以使用了,應用的使用:
Today擴充套件的應用:
import UIKit
import NotificationCenter
import MyDataKit
class TodayViewController: UIViewController, NCWidgetProviding {
@IBOutlet weak var labelView: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
let myData = Mydata()
myData.setMyData()
labelView.text = myData.title
}
到這裡檔案的共享就結束了。
4、一般的應用的Today都是可以通過點選進入到本應用中,同學們可以試一下其他的應用跳轉,這裡我們也簡單測試一下,
(1)要跳轉到應用中,首先需要註冊Schemes,
(2)註冊好之後,就可以拿來用了,首先在Today上放一個Button,並拉線設定點選事件,並在事件中寫上程式碼:
@IBAction func btnClick(sender: UIButton) {
let url = NSURL(string: "weatherEnter://enter")
extensionContext?.openURL(url!, completionHandler: { (isComple) -> Void in
});
}
(3)接收響應
在AppDelegate.swift中實現一個方法,如下:
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
if url.scheme == "weatherEnter" {
if url.host == "enter" {
let alert = UIAlertView(title: "提示", message: "通過Today開啟", delegate: nil, cancelButtonTitle: "取消")
alert.show()
}
return true
}
return false
}
這樣的話,基本上就完成了。
注意:Today擴充套件中不支援列印資料的,直接拿資料來用就可以的。