2014-06-11 13 views
8

Stworzyłem obiektu Swift DictionaryKonwersja Swift Dictionary do NSDictionary

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

Następnie mam objc ramy którego podłączony do mojego Swift aplikacji. Jest to obiekt wewnątrz własności

@property (nonatomic, retain) NSMutableDictionary *fields; 

próbuję przypisać to w ten sposób

object.fields = params 

I got błąd:

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

Próbowałem też zrobić to w ten sposób

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 

on skompilowany dobrze, ale mam błąd wykonania:

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

mam wszystkie moje pola wydrukowane i nie są one nil:

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

... 

1 
2 
3 
5 
4 

Jakieś pomysły?

+0

Ale "1", "2" itd. Nie są tekstami, które naprawdę przechowujesz w polu imienia i nazwiska - czy są? Wydaje mi się bardziej prawdopodobne, że są zerowe. – matt

Odpowiedz

6

Wypróbuj parms.bridgeToObjectiveC(). To może jednak dać ci NSDictionary, a nie NSMutableDictionary.

+1

Dzięki, działa w ten sposób! var params = [...]. bridgeToObjectiveC() as NSMutableDictionary –

+0

Nie ma za co! – Bill

+2

Czy to nie działa od wersji beta 6? let asdf = ["asdf": "qwer"]. BridgeToObjectiveC() 'Słownik ' nie ma członka o nazwie 'bridgeToObjectiveC' –

4

Zgaduję, że ten kod inicjalizacji swój params ...

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

... może się dziać przed masz jakieś wyloty pole tekstowe podłączona. Sugeruję, aby ustawić tę wartość var jako @lazy, wpisać ją jako Dictionary<String,String> i ustawić ją na wywoływane zamknięcie, które zwraca ten słownik. W związku z tym słownik nie zostanie utworzony później, kiedy faktycznie uzyskasz dostęp do self.params.

+0

+1 Po kilku testach osiągnąłem ten sam rezultat. – Sulthan

+0

Nie, jak widać funkcja println drukuje prawidłowe wartości. Mogę powiedzieć, że wszystkie TextFields zostały zainicjowane przed –

Powiązane problemy