私は、iOS10のSwift 3アプリケーションからローカル通知をトリガーしています。通知を受け取ってもOKですが、変数を渡そうとしています(関数から返された値になります)を通知のタイトルの一部として使用します。その変数の内容を表示するのではなく、単に "(関数)"として表示されます。通知タイトルの機能の結果を表示する(Swift 3、iOS10)
私は何の問題もなくアプリ自体内のラベルのテキストとして、同じ変数を使用しています。
私は通知をスケジュールするために以下のクラスとクラスの関数を作成しました:
class notificationController {
class func scheduleNotification(at date: Date, header: String, body: String) {
let calendar = Calendar(identifier: .gregorian)
let components = calendar.dateComponents(in: .current, from: date)
let newComponents = DateComponents(calendar: calendar, timeZone: .current, month: components.month, day: components.day, hour: components.hour, minute: components.minute)
let trigger = UNCalendarNotificationTrigger(dateMatching: newComponents, repeats: false)
let content = UNMutableNotificationContent()
content.title = NSString.localizedUserNotificationString(forKey: header, arguments: nil)
content.body = body
content.sound = UNNotificationSound.default()
let request = UNNotificationRequest(identifier: "textNotification", content: content, trigger: trigger)
UNUserNotificationCenter.current().removeAllPendingNotificationRequests()
UNUserNotificationCenter.current().add(request) {(error) in
if let error = error {
print("error: \(error)")
}
}
}
私がメインに関連付けられたビューコントローラのviewdidload()
機能でこの関数に渡すための変数を定義しています画面には、その後、scheduleNotification
関数を呼び出す:
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd/MM/yyyy HH:mm:ss"
let strDate = "25/01/2017 21:21:00"
let notificationDate = dateFormatter.date(from: strDate)
let dayNumber = String(describing: (playerArray[0]?.calculateDays)!)
let header = "Welcome to day \(dayNumber) of your life"
var body : String = ""
if(infoArray.count > 0) {
body = (infoArray[0]?.text)!
} else {body = "Doesn't it feel great to be alive?"}
notificationController.scheduleNotification(at: notificationDate!, header: header, body: body)
PlayerArray
は1つのプレイヤーCoreDataオブジェクトを含む配列です。
public class Player: NSManagedObject {
func calculateDays() -> Int {
let currentCalendar = Calendar.current
guard let dob = currentCalendar.ordinality(of: .day, in: .era, for: self.dob as! Date) else {
return 0
}
guard let today = currentCalendar.ordinality(of: .day, in: .era, for: Date()) else {
return 0
}
let days = today - dob
return days
}
}
dayNumber
変数が表示されないことを何らかの理由:私は古いプレーヤーは何日動作するようにプレイヤーのクラス内で次の関数を作成しましたか?私はそれが私が逃した明らかな何かのように感じる。どんなアイデアも魔法だろう。これに
let dayNumber = String(describing: (playerArray[0]?.calculateDays)!)
:あなたはこの()
変更して機能を呼び出す必要が
はdayNumberが作成された後にブレークポイントを入れて、値が何であるかを参照してください。 – GregP
興味深いことに、値は "(関数)"(文字列)なので、それが問題です。それがなぜ起こっているのでしょうか?私は何もオンラインで見つけることができません – JJmoneybags
あなたは関数 'calculateDays'を_naming_しているので、それを呼び出すのではありません。 – matt