NRGridView不会显示核心数据库中的数据

时间:2012-10-17 09:51:07

标签: objective-c ios ipad core-data gridview

我正在为当地一家足球俱乐部建立一个应用程序。我想在网格中显示所有玩家的名字和图片。因此我正在使用NRGridview。但它不会加载我的数据。我有一个包含所有球员信息的NSArray。在这里,您可以看到生成此数组的方法。

   - (NSArray *)getTeam
{
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Team"];
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"sortOrder" ascending:YES];
        NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
    [request setSortDescriptors:sortDescriptors];

    NSError *error = nil;
    NSArray *mutableFetchResults = [self.genkDatabase.managedObjectContext executeFetchRequest:request error:&error];
    NSLog(@"first error log %@", [error localizedDescription]);

    if (mutableFetchResults == nil) {
        NSLog(@"second error log %@", [error localizedDescription]);
    }else if ([mutableFetchResults count] == 0){
        NSLog(@"geen resultaten voor team");
    }else{
        NSLog(@"team names: %@",[mutableFetchResults valueForKey:@"name"]);
        return mutableFetchResults;
    }
    return mutableFetchResults;

}

这就是我在tableview中所做的。

- (NRGridViewCell*)gridView:(NRGridView *)gridView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *MyCellIdentifier = @"MyCellIdentifier";

    NRGridViewCell* cell = [gridView dequeueReusableCellWithIdentifier:MyCellIdentifier];

    if(cell == nil){
        cell = [[NRGridViewCell alloc] initWithReuseIdentifier:MyCellIdentifier];

        [[cell textLabel] setFont:[UIFont boldSystemFontOfSize:11.]];
        [[cell detailedTextLabel] setFont:[UIFont systemFontOfSize:11.]];

    }

    NSLog(@"players array %@",players);
    for (int i = 0; i <= [players count]; i++) {

       // NSData *imgData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:[[players objectAtIndex:i]valueForKey:@"image"]]];
       // UIImage *image = [[UIImage alloc]initWithData:imgData];
        //cell.imageView.image = image;
        cell.textLabel.text = [[players objectAtIndex:i]valueForKey:@"name"];
        cell.detailedTextLabel.text = [[players objectAtIndex:i]valueForKey:@"position"];
        return cell;
    }
    return cell;
}

NSLog总是给出(null)。我现在的问题是,我应该在哪里放置代码&#34; NSArray *players = [self getTeam]。这样我的tableview会填满数据吗?

修改

它确实给了我适量的部分和numberOfRowsInsection。对于numbersOfRowsIn部分,我创建了4个方法。 1种方法可以让守门员全部退出,1为防守者,1为边锋,1为攻击者。然后在我的tableview方法中,我做了以下几点。

- (NSInteger)gridView:(NRGridView *)gridView numberOfItemsInSection:(NSInteger)section
{
    if(section == 0){
        return [[self getDoelmannen]count];
    }else if (section == 1){
        return [[self getVerdedigers]count];
    }else if (section == 2){
        return [[self getMiddenvelders]count];
    }else{
        return [[self getAanvallers]count];
    }
    return [[self getAanvallers]count];
}

这很有效。但是我的细胞自身仍有问题。

EDIT2 好吧,我认为我的问题在于填充我的玩家阵列。我在viewDidLoad中执行以下操作

-(void)viewDidLoad{
    _players = [self getTeam];
    NSLog(@"players array: %@",_players);
}

其中包含以下日志。

2012-10-17 12:11:22.099 RacingGenk[63122:c07] nil
2012-10-17 12:11:22.099 RacingGenk[63122:c07] players array: (null)

这是我的getTeam代码

- (NSArray *)getTeam
{
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Team"];
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"sortOrder" ascending:YES];
        NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
    [request setSortDescriptors:sortDescriptors];

    NSError *error = nil;
    NSArray *mutableFetchResults = [self.genkDatabase.managedObjectContext executeFetchRequest:request error:&error];
    if (mutableFetchResults == nil) {
        NSLog(@"nil");
    }else if ([mutableFetchResults count] == 0){
        NSLog(@"geen resultaten voor team");
    }else{
        NSLog(@"team names: %@",[mutableFetchResults valueForKey:@"name"]);
        return mutableFetchResults;
    }
    return mutableFetchResults;

}

1 个答案:

答案 0 :(得分:0)

看起来players未初始化。您可以将[self getTeam]来电置于viewDidLoad方法中,并将players作为属性。

如果NRGridViewUITableView类似,则可能需要重载其他方法。

例如,UITableViewtableView:numberOrRowsInSection:。未能返回&gt;此方法的0值导致未显示任何内容。或者numberOfSectionsInTableView:,它返回部分的数量,依此类推。

检查您正在使用的控件的文档。

更新

由于executeFetchRequest:error:失败,您应检查是否有错误消息,而不是仅打印出(nil)

NSLog(@"%@", [error localizedDescription]);