2014-11-10 2 views
-1

Я занимаюсь своей первой настройкой покупок в приложении в моем первом проекте Swift. Я пытаюсь получить строку приложения из моего UserDefaults вместо того, чтобы испечь его в виде фиксированной строки, но я получаю сообщение об ошибке «Неустранимая ошибка: неожиданно найдено нуль при разворачивании необязательного значения»NSSet динамический объект - Swift

Я звоню переменную из UserDefaults следующим образом:

var bundleIdentity : AnyObject! 

NSUserDefaults.standardUserDefaults().synchronize() 
    var userDefaults = NSUserDefaults.standardUserDefaults() 

    if let myBundle: AnyObject? = userDefaults.objectForKey("bundle") { 
     bundleIdentity = myBundle as String 
    } 

Теперь я пытаюсь использовать его в моей Func «getProductInfo»:

func getProductInfo(){ 
    if SKPaymentQueue.canMakePayments(){ 
     let productID:NSSet = NSSet(object:self.bundleIdentity!) 
     let request:SKProductsRequest = SKProductsRequest(productIdentifiers: productID) 
     request.delegate = self 
     request.start() 
    } 
} 

Я знаю, что «bundleIdentity» приходит в, как я могу напечататьLN это как строка, но я смущен, почему я не могу использовать его в NSSet (object: self.bun dleIdentity!) и получить ошибку.

Любая помощь будет высоко оценена, поскольку я все еще новичок в Swift!

Благодаря

+0

Сообщение означает, что именно он говорит: этот объект равен нулю. Вы говорите, что можете напечатать это как строку, но я не вижу, чтобы вы это делали. Вопрос не в том, можете ли вы напечатать его в другом коде. Вопрос в том, что происходит, когда вы печатаете его прямо там, когда вы пытаетесь передать его NSSet. Если вы попробуете, вы увидите, что это действительно нуль. – matt

ответ

0

Вы заявили bundleIdentity в качестве дополнительного (с использованием ?), а затем вы сказали машину, что, безусловно, имеет значение (с использованием !). Он бросает истерику, потому что вы лгали ей.

+0

Спасибо, Ian, хорошо, поэтому теперь myBundle не является необязательным, «если пусть myBundle: AnyObject! = UserDefaults.objectForKey (« bundle »)« Я все равно получаю ту же ошибку. –

+0

Предположительно потому, что он все еще не существует. Объект, хранящийся в 'userDefaults', может быть' nil', если вы еще не установили для него значение. Вы должны проверять 'nil' внутри' getProductInfo'. –

 Смежные вопросы

  • Нет связанных вопросов^_^