2014-06-11 5 views
8

Swift Sözlük dönüştürme Ben Swift Sözlük nesneyiNSDictionary

var params = ["first_name": firstNameTextField.text, 
       "last_name": lastNameTextField.text, 
       "company": companyTextField.text, 
       "email_address": emailTextField.text, 
       "phone_number": phoneTextField.text] 

Sonraki oluşturduk, benim Swift uygulamaya bağlı objc çerçeveye sahip. Orada Ben öyle

object.fields = params 

atamak çalışıyorum

@property (nonatomic, retain) NSMutableDictionary *fields; 

özelliği ile içinde bir nesnedir Ve bir hata var:

Cannot convert the expression's type '()' to type 'NSMutableDictionary!' 

Ben de bunu yapmak için çalıştı yolu

var params = ["first_name": firstNameTextField.text, 
       "last_name": lastNameTextField.text, 
       "company": companyTextField.text, 
       "email_address": emailTextField.text, 
       "phone_number": pnoneTextField.text].mutableCopy() as NSMutableDictionary 

object.fields = params 

Iyi derlenmiş ama çalışma zamanı hata var:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: 
attempt to insert nil object from objects[0]' 

ben bütün alanları basılmış ve onlar değil nil şunlardır:

println(firstNameTextField.text) 
println(lastNameTextField.text) 
println(companyTextField.text) 
println(emailTextField.text) 
println(pnoneTextField.text) 

... 

1 
2 
3 
5 
4 

Herhangi bir fikir?

+0

Ama "1", "2" ve benzeri, gerçekten bir ad alanı ve bir soyadı alanı tutuyorsunuz metin değil - onlar ???? Bana öyle görünüyor ki, onlar daha fazladır. – matt

cevap

6

parms.bridgeToObjectiveC()'u deneyin. Bu size bir NSMutableDictionary yerine bir NSDictionary verebilir.

+1

'dan önce başlatılmış olduğunu söyleyebilirim, teşekkürler bu şekilde! var params = [...]. NSMutableDictionary olarak bridgeToObjectiveC() –

+0

Rica ederim! – Bill

+2

Bu, beta 6'dan beri çalışmıyor gibi görünüyor mu? [ "asdf": "qwer"] asdf = let bridgeToObjectiveC() 'Sözlük ' 'bridgeToObjectiveC' –

4

Bu kod herhangi bir metin alanını çıkışları bağladım var önce senin params ...

var params = ["first_name": firstNameTextField.text, 
       "last_name": lastNameTextField.text, 
       "company": companyTextField.text, 
       "email_address": emailTextField.text, 
       "phone_number": phoneTextField.text] 

... neler olabileceğini başlatılıyor olduğunu tahmin ediyorum. Öneririm, bu var'u @lazy olarak ayarlamanız, Dictionary<String,String> olarak yazmanız ve bu sözlüğü döndüren çağrılan bir kapanmaya ayarlamanızdır. Böylece, self.params'a gerçekten eriştiğinizde sözlük daha sonra oluşturulmayacaktır.

+0

+1 Bazı testlerden sonra aynı sonuca vardım. – Sulthan

+0

Hayır, println işlevini gördüğünüz gibi uygun değerleri yazdırır. Bu yüzden tüm TextFields'ın –