let dataStore = self.backendless.data.of(Contact().ofClass())
dataStore?.find(queryBuilder,
response: {
(sorted) -> () in
let sortedArr = sorted as! [Contact] // Get an error here
print("Result: \(sortedArr)")
},
error: {
(fault : Fault?) -> () in
print("Server reported an error: \(fault)")
})
I’m getting an error for casting. Error: Could not cast value of type ‘__NSDictionaryM’ (0x000000) to ‘APPNAME.Contact’ (0x000000).
SDK: 4.0b3
Hi Brian,
Just to make sure, are you using it with an app on the 4.0 backend?
Regards,
Mark
Yes I am. In the response, “___ class” is set to null. Why is that?
Hello Brian,
I can’t reproduce this issue. Here is the method:
func sort () {
let queryBuilder = DataQueryBuilder()
queryBuilder!.setSortBy(["name"])
let dataStore = self.backendless.data.of(Contact().ofClass())
dataStore?.find(queryBuilder,
response: {
(sorted) -> () in
let sortedArr = sorted as! [Contact]
print("Result: \(sortedArr)")
},
error: {
(fault : Fault?) -> () in
print("Server reported an error: \(fault)")
})
}
The result attached as screen shot. I have no errors with 4.0b3.
Please make sure you have created the Contact class in your application.
Regards, Olga
Contact class is added.
class Contact: NSObject {
var name: String?
var addedField: Field?
}
Field class
class Field: NSObject {
var foo: String?
}
I have an afterFind() that adds a field to it. The other problem on top of ___class being null, is that the added field is not part of the json in the response from dataStore?.find
Does it work if you disable the afterFind handler?
Could you please try the following:
Enable the event handler then go to Data > REST Console and run a GET request for the table which has the event handler. Record the JSON response
Then disable the event handler and repeat the request from REST Console
Post both responses here, so we can take a look at them.
Mark
Enabled:
[
{
"created": "2017-03-18T07:42:03.000Z",
"ownerId": "01BD69AA-B983-9174-FFE1-511496CE0700",
"__meta": "{\"relationRemovalIds\":{},\"selectedProperties\":[\"created\",\"ownerId\",\"name\",\"___class\",\"updated\",\"objectId\"],\"relatedObjects\":{}}",
"___class": "Contact",
"name": "Brittney",
"updated": "2017-04-03T20:30:46.000Z",
"objectId": "20776383-929C-DD4B-FF4A-7CA921EE7300",
"addedField": {
"___class": "Field",
"foo": "spmething"
}
}
]
Disabled:
[
{
"created": 1489822923000,
"ownerId": "01BD69AA-B983-9174-FFE1-511496CE0700",
"__meta": "{\"relationRemovalIds\":{},\"selectedProperties\":[\"created\",\"ownerId\",\"name\",\"___class\",\"updated\",\"objectId\"],\"relatedObjects\":{}}",
"name": "Brittney",
"___class": "Contact",
"updated": 1491251446000,
"objectId": "20776383-929C-DD4B-FF4A-7CA921EE7300"
}
]
So the differences I identified are:
When enabled:
- The format of the “updated” and “created” fields changed
- The “addedField” is added.
I suspect the first item is the root cause of the exception. To confirm this, would it be possible to create a no-op afterFind event handler (which does nothing) and see if the cast error still occurs?
Regards,
Mark
Thanks, Brian. This gives us enough info to reproduce the fix the problem. I opened an internal ticket for a developer.
Just to clarify - did you use a JS or Java event handler?
Thank you, Mark. It’s a JS event handler.
Hi Brian,
The problem has been fixed, please verify.