2015-12-06 5 views
-3

Я следил за онлайн-учебным пособием, который помогает в создании QR-кода. Моя цель состоит в том, что созданный QR-код будет храниться в Parse DB как файл и локально в userObject как UIImage. Когда я побежал мой код ниже, это вызвало следующую ошибку:Swift - исключение запуска фильтра UIImage

2015-12-06 12:43:45.994 Mawq[7246:279805] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key inputImage.'

Код для создания QR-кода я использовал:

print("1") 
let data = userObject.username!.dataUsingEncoding(NSISOLatin1StringEncoding, allowLossyConversion: false) 
print("2") 
let filter = CIFilter(name: "CIQRCodeGenerator") 
print("3") 
filter!.setValue(data, forKey: "QRImage") 
print("4") 
let newQRImage = UIImage(CIImage: filter!.outputImage!); 
print("5") 
user["qrCode"] = newQRImage; 
print("6") 
userObject.userQRCode = newQRImage; 
print("7") 

Печать заявления просто знать, где инициируется ошибка , По-видимому, как показано на консоли, после печати строки 3 это происходит неправильно. Следующее учебное пособие приведено здесь: http://www.appcoda.com/qr-code-generator-tutorial/.

userObject, где я хочу, чтобы сохранить изображение выглядит следующим образом:

public class UserClass { 

    var name: String? 
    var email: String? 
    var password: String? 
    var mobile: String? 
    var username: String? 
    var tempToken: Int? 
    var userQRCode: UIImage? 
} 

Это мой первый раз использовать UIKit для достижения этого результата ... так что любая помощь приветствуется.

Благодаря

+0

Является ли переменная фильтра nil после того, как вы создали ее с помощью CIFilter (имя: «CIQRCodeGenerator»)? – andlin

+0

Что такое 'filter !.setValue (data, forKey:« QRImage »)' должен делать? Он не указан в учебнике. – luk2302

+0

@ luk2302 он находится в учебнике как filter.setValue (data, forKey: "inputMessage") –

ответ

2

Просто используйте один и тот же код, который был использован в учебнике:

filter!.setValue(data, forKey: "inputMessage") 

в то время как data держит данные, которые вы хотите в QR-код изображения для хранения. Например, имя пользователя:

let data = userObject.username!.dataUsingEncoding(NSISOLatin1StringEncoding, allowLossyConversion: false) 

Это все, что вам нужно. НЕ ДЕЛАЕТ изменить ключ.

То, что используется здесь для установки различных значений фильтра, называется кодированием по ключевым словам, вы вводите произвольные значения для определенных ключей. Фильтр, чем считывает значения некоторых ключей, интерпретирует и оценивает их. Набор ключей фиксирован. Фильтр ожидает наличия inputMessage. Тем не менее, фильтр не ожидает QRImage.