[英]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.