Start a new topic

KCSLinkedAppdataStore can only be stored but not fetched

I can save a relational entity with KCSLinkedAppdataStore. But I cannot fetch it using any methods, including queryWithQuery, loadObjectWithID. I know this module is still in beta test ( If it works, would you please send me a sample code if convenient ( ? Thanks.

It appears that [KCSAppdataStore queryWithQuery:withCompletionBlock:withProgressBlock:] works fine. In the fetched answer, the linked attribute is KinveyRef, not the referenced object.

[KCSLinkedAppdataStore queryWithQuery:withCompletionBlock:withProgressBlock:] does not work.

I don't know how this will be designed. But I hope the referenced object can also be fetched in the answer. Thanks.
What do you mean it does not work?
KCSCollection* collection = [KCSCollection collectionFromString:@"name"

ofClass:[classname class]


_store = [KCSAppdataStore storeWithCollection:collection

options:@{KCSStoreKeyCachePolicy : @(KCSCachePolicyLocalFirst)}


if _store is defined by KCSAppdataStore, it can be used to fetch data. If _store is KCSLinkedAppdataStore, it cannot fetch anything. You can test it.

This is actually not a big deal. The real problem is that the loaded object is KinveyRef tyep, not the real referenced object. For example, if you have a invitee in your invitation table and the invitee is a link to the KCSUserCollectionName, then in your fetched data, invitee will be like {"_collection":"user","_id":"52b4e557dbec78f429ba821a","_type":"KinveyRef"} . This means programmers have to query in the KCSUserCollectionName again by the "_id" to get the user's name ! (or email, picture etc.) The ironic part is that in the fetched data the invitee IS a KCSUser* type, but when your use invitee.givenName, you get an error because it is a KinveyRef type.

I hope you understand what I mean. But if you test it, you will see it anyway.

The only method for programmers to work under it is to change the KCSUser* type to a NSDictionary, and then get the "_id", then by the _id query the KCSUserCollectionName , like : KCSQuery* query = [KCSQuery queryOnField:@"_id"

withExactMatchForValue:[(NSDictionary*)[[ fetched objectAtIndex:indexPath.row] from_user] objectForKey: @"_id"]


[userStore queryWithQuery:query withCompletionBlock:^(NSArray *objectsOrNil, NSError *errorOrNil){}withProgressBlock:nil

I will look into this.
Hi Yonghui, The 1.26 release is out
Did KinveyKit 1.26 fix this issue for you?

No, it didn't, still can only store but not fetch relational data. 
If I fetch with KCSLinkedAppdataStore  a Like , the corresponding event is not resolved , however property "toUser" is being resolved.

It actually fetches, but you have to downcast it to nsobject and get values  using  valueforkey . If you have your like.event , will crash, however like.event.valueForKey("name") will work. So basically it works , but it's not very convenient.

Login or Signup to post a comment