2014-06-11 29 views
8

tôi đã tạo ra một từ điển Swift đối tượngChuyển đổi Swift từ điển để NSDictionary

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

Tiếp theo, tôi có ObjC khuôn khổ mà tôi kết nối với ứng Swift của tôi. Có một đối tượng bên trong với tài sản

@property (nonatomic, retain) NSMutableDictionary *fields; 

Tôi đang cố gắng để gán nó theo cách này

object.fields = params 

Và có một lỗi:

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

Tôi cũng đã cố gắng để làm điều đó đây cách

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 

Nó được biên soạn tốt, nhưng tôi đã nhận lỗi runtime:

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

tôi có tất cả các lĩnh vực của tôi in và họ không nil:

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

... 

1 
2 
3 
5 
4 

Bất kỳ ý tưởng?

+0

Nhưng "1", "2" và như vậy được không phải văn bản mà bạn đang thực sự giữ trong một lĩnh vực tên đầu tiên và một trường tên cuối cùng - là họ ???? Dường như với tôi nhiều khả năng họ là _all_ nil. – matt

Trả lời

6

Hãy thử parms.bridgeToObjectiveC(). Điều đó có thể cung cấp cho bạn một NSDictionary hơn là một NSMutableDictionary, mặc dù.

+1

Cảm ơn, nó hoạt động theo cách này! var params = [...]. bridgeToObjectiveC() là NSMutableDictionary –

+0

Bạn được chào đón! – Bill

+2

Điều này dường như không hoạt động như phiên bản beta 6? cho phép asdf = ["asdf": "qwer"]. BridgeToObjectiveC() 'Từ điển ' không có thành viên có tên 'bridgeToObjectiveC' –

4

Tôi đoán rằng mã này khởi tạo của bạn params ...

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

... có thể xảy ra trước khi bạn có bất kỳ cửa hàng trường văn bản nối. Những gì tôi muốn đề nghị là bạn đặt số var này là @lazy, nhập nó là Dictionary<String,String> và đặt nó thành một đóng được gọi là trả về từ điển này. Do đó từ điển sẽ không được tạo cho đến sau này, khi bạn thực sự truy cập self.params.

+0

+1 Sau một số thử nghiệm, tôi đã đạt được kết quả tương tự. – Sulthan

+0

Không, như bạn có thể thấy chức năng println in các giá trị thích hợp. Vì vậy, tôi có thể nói rằng tất cả các TextFields được khởi tạo trước –

Các vấn đề liên quan