【发布时间】:2015-08-05 17:18:52
【问题描述】:
我无法理解如何使用 Parse 缓存和检索对象。我正在尝试创建一个查询,并缓存对象,然后只检索缓存的对象,除非用户将对象保存到 PFObject,然后我想使用网络重新加载数据。
这是我的尝试,也是我查询 PFObjects 的方式。
//Gets the playlists from the desired user
+(void)getPlaylistsForUser:(PFUser *)user withCompletion:(void(^)(NSMutableArray *playlists))completion
{
PFQuery *userQuery = [PFQuery queryWithClassName:@"Playlists"];
userQuery.cachePolicy = kPFCachePolicyCacheElseNetwork;
[userQuery whereKey:@"userId" equalTo:[user objectId]];
[userQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error){
NSMutableArray *playlists = [[NSMutableArray alloc]init];
playlists = [objects mutableCopy];
completion(playlists);
}
}];
}
How would I go about notifying the query that there needs to be a network call instead of returning cached results?
编辑:我只用几行代码就设法获得了所需的功能。
//Gets the playlists from the desired user
+(void)getPlaylistsForUser:(PFUser *)user withCompletion:(void(^)(NSMutableArray *playlists))completion
{
PFQuery *userQuery = [PFQuery queryWithClassName:@"Playlists"];
[userQuery whereKey:@"userId" equalTo:[user objectId]];
userQuery.cachePolicy = kPFCachePolicyCacheElseNetwork;
[userQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error){
NSMutableArray *playlists = [[NSMutableArray alloc]init];
playlists = [objects mutableCopy];
completion(playlists);
}
}];
}
+ (void)saveTrack:(NSDictionary *)track toPlaylist:(PFObject *)playlist withCompletion:(void(^)(BOOL success))completion
{
[playlist addObject:track forKey:@"playlist"];
[playlist saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
if (error)
{
NSLog(@"Error creating/saving playlist");
}
else{
PFUser *current = [PFUser currentUser];
PFQuery *playlistQuery = [PFQuery queryWithClassName:@"Playlists"];
[playlistQuery whereKey:@"userId" equalTo:[current objectId]];
[playlistQuery clearCachedResult];
completion((BOOL)YES);
}
}];
}
本质上,我只是在需要查询重新加载数据时清除特定查询的缓存结果。我将查询的 cachePolicy 设置为 kPFCachePolicyCacheElseNetwork
这是进行缓存的最佳方式吗?似乎按预期工作。
【问题讨论】:
标签: ios caching parse-platform