[英]Loading from cache UITableView data on Parse
我有一个嵌套查询,如下所示,即使我使用(或我认为我使用)解析缓存,加载过程也需要3-4秒。 它不符合我的预期。 是否有可能在首次启动时从缓存加载,然后从解析云进行更新。 我是否至少需要核心数据或sqlite3才能与本地端的解析同步?
另外,当我使用“ query.cachePolicy”表视图获取重复的结果时,如何以正确的方式使用它。
- (void) retrieveSnapsFromParse {
NSString *currentUserName = [PFUser currentUser].username;
PFQuery *retrieveSnaps = [PFQuery queryWithClassName:@"Snap"];
[retrieveSnaps whereKey:@"from" equalTo:[PFUser currentUser].username];
PFQuery *retrieveSnaps2 = [PFQuery queryWithClassName:@"Snap"];
[retrieveSnaps2 whereKey:@"to" equalTo:[PFUser currentUser].username];
PFQuery * query = [PFQuery orQueryWithSubqueries:@[retrieveSnaps, retrieveSnaps2]];
query.cachePolicy = kPFCachePolicyCacheThenNetwork;
[query orderByDescending:@"createdAt"];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
for (PFObject *object in objects) {
Snap *snap = [Snap new];
if([currentUserName isEqualToString:[object objectForKey:@"to"]]) {
snap.userName = [object objectForKey:@"from"];
snap.sentOrReceived = @"Received";
PFFile *snapImageFile = [object objectForKey:@"snappedimage"];
[snapImageFile getDataInBackgroundWithBlock:^(NSData *data, NSError *error) {
if (!error) {
UIImage *snapImage = [UIImage imageWithData:data];
snap.snapImage = snapImage;
}
}];
} else if([currentUserName isEqualToString:[object objectForKey:@"from"]]) {
snap.userName = [object objectForKey:@"to"];
snap.sentOrReceived = @"Sent";
}
snap.opened = [object[@"opened"]boolValue];
snap.counter = [object[@"second"]intValue];
snap.objectId = [NSString stringWithFormat:@"%@",object.objectId];
NSDate *createdAt = object.createdAt;
snap.createdDate = createdAt;
// Profile image for UICustomTableViewCell
PFQuery *userQuery = [PFUser query];
[userQuery whereKey:@"username" equalTo:snap.userName];
userQuery.cachePolicy = kPFCachePolicyCacheElseNetwork;
[userQuery getFirstObjectInBackgroundWithBlock:^(PFObject *object, NSError *error) {
if (object) {
snap.userFirstName = [object objectForKey:@"firstname"];
PFFile *imageFile = [object objectForKey:@"profileimage"];
[imageFile getDataInBackgroundWithBlock:^(NSData *data, NSError *error) {
if (!error) {
UIImage *image = [UIImage imageWithData:data];
snap.userProfileImage = image;
}
}];
[snapsTemp addObject:snap];
}
snapsTable = snapsTemp;
[self.tableView reloadData];
}];
}
}
}];
}
我在下面的cellForRowAtIndexPath上使用的代码;
cell.cellUserProfileImage.image = snap.userProfileImage;
也在.m文件中用于可变数组
@implementation SnapsVC
{
NSMutableArray *snapsTable;
}
将下面的代码放入cellForRowAtIndexPath而不是restoreSnapsFromParse后,它开始按预期运行
PFQuery *userQuery = [PFUser query];
[userQuery whereKey:@"username" equalTo:snap.userName];
userQuery.cachePolicy = kPFCachePolicyCacheElseNetwork;
[userQuery getFirstObjectInBackgroundWithBlock:^(PFObject *object, NSError *error) {
if (object) {
PFFile *imageFile = [object objectForKey:@"profileimage"];
[imageFile getDataInBackgroundWithBlock:^(NSData *data, NSError *error) {
if (!error) {
cell.cellUserProfileImage.image = [UIImage imageWithData:data];
}
}];
cell.cellUserFirstNameLabel.text = [object objectForKey:@"firstname"];
}
}];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.