Как передать строку sqlite.swift другому контроллеру с помощью NSNotification

Я использую sqlite.swift в своем проекте.

let inputdata = row as Row

NSNotificationCenter.defaultCenter().postNotificationName("navigateToProductDetail",object: inputdata)

Я не могу передать "входные данные"

inputdata будет AnyObject , в моем случае это Row

так что выдает ошибку, помогите мне решить эту проблему или подскажите альтернативный способ передать этот объект строки другому контроллеру

введите здесь описание изображения


person Velu Loganathan    schedule 11.11.2015    source источник
comment
Пожалуйста, попробуйте описать предполагаемое поведение и что пойдет не так. Уведомление не опубликовано или проблема в том, что inputdata не включено в уведомление?   -  person Simon    schedule 11.11.2015


Ответы (1)


Вы можете передать его через userInfo следующим образом

let userInfo = [ "inputData" : inputdata ]
NSNotificationCenter.defaultCenter().postNotificationName("navigateToProductDetail", object: nil, userInfo: userInfo)

И вы можете получить это из объекта NSNotification со свойством userInfo

func handleNotification(notification: NSNotification){
    print(notification.userInfo)
    print(notification.userInfo!["inputData"])
}

Если Row является struct, сначала вам нужно будет обернуть его в объект класса, затем вы можете передать объект класса этой функции.

Создайте класс-оболочку

class Wrapper<T> {
    var wrappedValue: T
    init(theValue: T) {
        wrappedValue = theValue
    }
}    

Оберните свой ряд

let wrappedInputData = Wrapper(theValue: inputdata)
let userInfo = [ "inputData" : wrappedInputData ]
NSNotificationCenter.defaultCenter().postNotificationName("navigateToProductDetail", object: nil, userInfo: userInfo)   

Верните свои входные данные

func handleNotification(notification: NSNotification){
    print(notification.userInfo)

    if let info = notification.userInfo {
        if let wrappedInputData = info["inputData"] {
            let inputData : Row = (wrappedInputData as? Wrapper)!.wrappedValue
            print(inputData)
        }

    }
}
person ogres    schedule 11.11.2015
comment
что такое ряд? это структура? или класс? - person ogres; 12.11.2015
comment
это означает, что Row не может быть преобразован как AnyObject - person ogres; 12.11.2015
comment
В моем случае Row является структурой - person Velu Loganathan; 12.11.2015
comment
Вы не можете передать Struct таким образом, вам нужно будет создать обертку для этого - person ogres; 12.11.2015
comment
я был бы признателен, если бы вы поделились со мной кодом для этого - person Velu Loganathan; 12.11.2015
comment
Давайте продолжим обсуждение в чате. - person Velu Loganathan; 12.11.2015