2

地元のサッカー クラブ用のアプリを作成しています。すべてのプレイヤーの名前と写真をグリッドに表示したいと考えています。したがって、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;

}

そして、これは私がテーブルビューで行うことです。

- (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) を返します。私の質問は、NSArray *players = [self getTeam]私のテーブルビューがデータでいっぱいになるように、コード " . をどこに置くべきですか?

編集

適切な量​​のセクションと numberOfRowsInsection が返されました。numbersOfRowsIn セクションでは、4 つのメソッドを作成しました。1 つはゴールキーパー、1 つはディフェンダー、1 つはウィンガー、1 つはアタッカーを完全に制する方法です。次に、テーブルビューメソッドで次のことを行いました。

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

}
4

1 に答える 1

0

players初期化されていないようです。メソッドに[self getTeam]呼び出しを入れて、プロパティを作成できます。viewDidLoadplayers

NRGridViewが のようなものである場合UITableView、オーバーロードする必要がある他のメソッドがおそらく存在します。

たとえば、UITableViewを持っていtableView:numberOrRowsInSection:ます。このメソッドから 0 より大きい値を返さないと、何も表示されません。またはnumberOfSectionsInTableView:、セクションの数などを返します。

使用しているコントロールのドキュメントを確認してください。

アップデート:

あなたexecuteFetchRequest:error:は失敗しているので、単に印刷するのではなく、エラーメッセージがあるかどうかを確認する必要があります(nil):

NSLog(@"%@", [error localizedDescription]);
于 2012-10-17T09:57:27.237 に答える