Vấn đề có vẻ là phương pháp chữ ký thay đổi, như Kashif gợi ý . Swift dường như không thể kết nối với phương thức Objective-C vì chữ ký không còn khớp với tên của phương thức subscript.
Cách giải quyết 1
Bạn có thể làm việc xung quanh này mà không sửa đổi khuôn khổ bằng cách gọi phương thức subscript trực tiếp, thay vì sử dụng []
điều hành:
Thay vì sử dụng các hướng dẫn dưới đây để nhận được giá trị của một khóa cụ thể:
let str = user["key-name"] as? Bool
Vui lòng sử dụng t anh hướng dẫn sau đây:
let str = user.objectForKey("key-name") as? Bool
và
Thay vì sử dụng các hướng dẫn dưới đây để thiết lập giá trị của một phím đặc biệt:
user["key-name"] = "Bla bla"
Vui lòng sử dụng các hướng dẫn sau đây:
user.setObject("Bla bla", forKey: "key-name")
Cách giải quyết 2
Một giải pháp khác là thêm một phần mở rộng trên PFObject mà thực hiện các subscript
thành viên và kêu gọi setValue:forKey:
:
extension PFObject {
subscript(index: String) -> AnyObject? {
get {
return self.valueForKey(index)
}
set(newValue) {
if let newValue: AnyObject = newValue {
self.setValue(newValue, forKey: index)
}
}
}
}
Lưu ý rằng cách giải quyết thứ hai này không phải là hoàn toàn an toàn, bởi vì tôi m không chắc chắn Parse thực sự thực hiện các phương thức subscript như thế nào (có thể họ làm nhiều hơn là chỉ gọi setValue:forKey
- nó đã làm việc trong các trường hợp thử nghiệm đơn giản của mình, vì vậy nó có vẻ như một giải pháp hợp lệ cho đến khi điều này được sửa trong Parse/Swift.
Nguồn
2015-03-12 16:30:20
Bạn có ý nghĩa gì khi xóa 'PF_NULLABLE_S'? Tôi có nên, nói, bình luận '- (PF_NULLABLE_S id) objectForKeyedSubscript: (NSString *) chính;' dòng ra? –
Tôi có nghĩa là thay đổi nó trong 'PFObject.h' thành: ' '' - (id) objectForKeyedSubscript: (NSString *) khóa; '' ' – kashif
Cảm ơn bạn, dear sir –