2015-02-21 4 views
0

Я использую Parse для извлечения данных в Table View. Я использую PFQueryTableViewController.Данные анализа не загружаются перед представлением таблицы.

Когда я запускаю приложение, некоторые из данных Parse загружаются в Table View, а некоторые нет. Поэтому я должен потянуть, чтобы обновить один раз, чтобы все было загружено.

Я попытался положить [self.tableView reloadData] несколько различных мест, пытались двигаться мой код viewDidLoadviewDidAppearviewWillAppear и такие, и не может получить ничего работать.

Я вижу, что все мои данные регистрируются правильно в консоли, когда он запущен.

я установить контрольные точки, чтобы увидеть, что загружал первым, и он пошел в таком порядке: initWithCoder ->viewDidLoad ->(PFQuery *)queryForTable

Я уверен, что я полностью отсутствует что-то простое, но я не могу понять это какие-то идеи? Благодаря!

У меня есть тонны кода, поэтому просто дайте мне знать, какие части будут полезны, и я отправлю сообщение как можно скорее.

EDIT: Добавление кода в просьбе soulshined

- (id)initWithCoder:(NSCoder *)aCoder 
{ 
    self = [super initWithCoder:aCoder]; 
    if (self) { 
     // The className to query on 
     self.parseClassName = @"na"; 

     // The key of the PFObject to display in the label of the default cell style 
     self.textKey = @"match"; 

     // Whether the built-in pull-to-refresh is enabled 
     self.pullToRefreshEnabled = YES; 

     // Whether the built-in pagination is enabled 
     self.paginationEnabled = NO; 
    } 

    return self; 
} 

- (PFQuery *)queryForTable { 
    // GMT Date from Phone 
    NSDate *gmtNow = [NSDate date]; 

    // Query Parse 
    PFQuery *query = [PFQuery queryWithClassName:self.parseClassName]; 
    [query orderByAscending:@"dateGame"]; 
    [query whereKey:@"dateGame" greaterThanOrEqualTo:gmtNow]; 

    return query; 
} 

EDIT - добавление в Yuchen

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object { 
    static NSString *playoffsIdentifier = @"PlayoffsCell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:playoffsIdentifier]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:playoffsIdentifier]; 
    } 

    // Matchup 
    UILabel *matchLabel = (UILabel*) [cell viewWithTag:101]; 
    matchupLabel.text = [object objectForKey:@"match"]; 

    // Date 
    UILabel *dateLabel = (UILabel*) [cell viewWithTag:102]; 
    dateLabel.text = [object objectForKey:@"date"]; 

    // Time 
    UILabel *timeLabel = (UILabel*) [cell viewWithTag:103]; 
    timeLabel.text = [object objectForKey:@"time"]; 

    // Color 
    // Using App Group - Because wasn't taking global color array for some reason 
    NSString *container = @"group.com.thwams.play"; 
    NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:container]; 
    NSArray *colorGroup = [defaults objectForKey:@"KeyColor"]; 
    NSLog(@"ColorCell: %@", colorGroup); 
    cell.backgroundColor = [self colorWithHexString:[colorGroup objectAtIndex:indexPath.row]]; 

    return cell; 
} 

// Added to convert Hex colors to RGB 
-(UIColor*)colorWithHexString:(NSString*)hex 
{ 
    NSString *cString = [[hex stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString]; 
    // String should be 6 or 8 characters 
    if ([cString length] < 6) return [UIColor grayColor]; 
    if ([cString hasPrefix:@"("]) return [UIColor colorWithRed:7.0f/255.0f green:32.0f/255.0f blue:50.0f/255.0f alpha:1.0f]; 
    // strip 0X if it appears 
    if ([cString hasPrefix:@"0X"]) cString = [cString substringFromIndex:2]; 
    if ([cString length] != 6) return [UIColor grayColor]; 
    // Separate into r, g, b substrings 
    NSRange range; 
    range.location = 0; 
    range.length = 2; 
    NSString *rString = [cString substringWithRange:range]; 
    range.location = 2; 
    NSString *gString = [cString substringWithRange:range]; 
    range.location = 4; 
    NSString *bString = [cString substringWithRange:range]; 
    // Scan values 
    unsigned int r, g, b; 
    [[NSScanner scannerWithString:rString] scanHexInt:&r]; 
    [[NSScanner scannerWithString:gString] scanHexInt:&g]; 
    [[NSScanner scannerWithString:bString] scanHexInt:&b]; 
    return [UIColor colorWithRed:((float) r/255.0f) 
          green:((float) g/255.0f) 
          blue:((float) b/255.0f) 
          alpha:1.0f]; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    // Hide Nav Bar 
    [self.navigationController setNavigationBarHidden:YES]; 

    // GMT Date from Phone 
    NSDate *gmtNow = [NSDate date]; 
    NSLog(@"GMT Now: %@", gmtNow); 

    // Query Parse 
    PFQuery *query = [self queryForTable]; 
    [query whereKey:@"dateGame" greaterThanOrEqualTo:gmtNow]; 

    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
     if (!error) { 
      NSMutableArray *localMatchup = [@[] mutableCopy]; 
      NSMutableArray *localDate = [@[] mutableCopy]; 
      NSMutableArray *localTime = [@[] mutableCopy]; 
      NSMutableArray *localTV = [@[] mutableCopy]; 
      NSMutableArray *localColor = [@[] mutableCopy]; 

      for (PFObject *object in objects) { 
       // Add objects to local Arrays 
       [localMatchup addObject:[object objectForKey:@"matchup"]]; 
       [localDate addObject:[object objectForKey:@"date"]]; 
       [localTime addObject:[object objectForKey:@"time"]]; 
       [localTV addObject:[object objectForKey:@"tv"]]; 
       [localColor addObject:[object objectForKey:@"color"]]; 

       // App Group 
       NSString *container = @"group.com.thwams.playoffs"; 
       NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:container]; 

       // Matchup 
       [defaults setObject:localMatchup forKey:@"KeyMatchup"]; 
       NSArray *savedMatchup = [defaults objectForKey:@"KeyMatchup"]; 
       NSLog(@"Default Matchup: %@", savedMatchup); 
       savedMatchup = matchupArray; 

       // Date 
       [defaults setObject:localDate forKey:@"KeyDate"]; 
       NSArray *savedDate = [defaults objectForKey:@"KeyDate"]; 
       NSLog(@"Default Date: %@", savedDate); 
       savedDate = dateArray; 

       // Time 
       [defaults setObject:localTime forKey:@"KeyTime"]; 
       NSArray *savedTime = [defaults objectForKey:@"KeyTime"]; 
       NSLog(@"Default Time: %@", savedTime); 
       savedTime = timeArray; 

       // TV 
       [defaults setObject:localTV forKey:@"KeyTV"]; 
       NSArray *savedTV = [defaults objectForKey:@"KeyTV"]; 
       NSLog(@"Default TV: %@", savedTV); 
       savedTV = tvArray; 

       // Color 
       [defaults setObject:localColor forKey:@"KeyColor"]; 
       NSArray *savedColor = [defaults objectForKey:@"KeyColor"]; 
       NSLog(@"Default Color: %@", savedColor); 
       savedColor = colorArray; 
      } 

     } 
    }]; 
} 
+0

Показать initWithCoder и queryForTable пожалуйста и спасибо. Тот факт, что это не вся загрузка для начала, является самой проблемой – soulshined

+0

Где вы «NSLog' вы данные? не могли бы вы показать соответствующий код там? Что произойдет, если вы вызовете [self.tableview reloaddata] сразу после регистрации? есть ли у вас данные, указанные в представлении таблицы? –

+0

@soulshined Я добавил два вы попросили, дайте мне знать, если что-то еще нуждается в разъяснении. Есть идеи? – SRMR

ответ

2

Здесь проблема в вашем коде. Следующий код работает в фоновом режиме. Поэтому после этого вам понадобится [tableview reload]. И вам нужно будет сделать это в основной теме.

[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
    // a lot of stuff going on here 
} 

Таким образом, исправление выглядит следующим образом:

[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
    if (!error) { 
     // your code ... 
     for (PFObject *object in objects) { 
      // your code ... 
     } 

     // Add these here 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      [self.tableView reload]; 
     }); 
    } 
} 
+0

Отлично, спасибо! – SRMR

Смежные вопросы