2014-10-01 93 views
0

我有一个嵌套的查询,你可以看到下面,它花了3-4秒加载,即使我使用(或我认为我使用)解析缓存。它没有像我预期的那样工作。是否有可能在首次启动时从缓存中加载,然后从分析云中进行更新。我至少需要核心数据还是sqlite3来同步本地方面的解析?从缓存中加载UITableView数据Parse

另外,当我使用“query.cachePolicy”tableview得到重复的结果时,我该如何正确使用它。

- (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; 
} 

回答

0

它开始工作,我希望以后我把下面的代码来代替的cellForRowAtIndexPath的retrieveSnapsFromParse

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"]; 
    } 
}];