2017-01-25 11 views
-1

私は、iOS10のSwift 3アプリケーションからローカル通知をトリガーしています。通知を受け取ってもOKですが、変数を渡そうとしています(関数から返された値になります)を通知のタイトルの一部として使用します。その変数の内容を表示するのではなく、単に "(関数)"として表示されます。通知タイトルの機能の結果を表示する(Swift 3、iOS10)

Result of notification being fired

私は何の問題もなくアプリ自体内のラベルのテキストとして、同じ変数を使用しています。

私は通知をスケジュールするために以下のクラスとクラスの関数を作成しました:

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)!) 

:あなたはこの()

変更して機能を呼び出す必要が

+0

はdayNumberが作成された後にブレークポイントを入れて、値が何であるかを参照してください。 – GregP

+0

興味深いことに、値は "(関数)"(文字列)なので、それが問題です。それがなぜ起こっているのでしょうか?私は何もオンラインで見つけることができません – JJmoneybags

+0

あなたは関数 'calculateDays'を_naming_しているので、それを呼び出すのではありません。 – matt

答えて

1

let dayNumber = String(describing: (playerArray[0]?.calculateDays())!) 
関連する問題