2013-08-18 158 views
1

我有一個核心數據一對多的關係,看起來像這樣:訪問屬性值

Athlete(evals)<->>Eval(whosEval)

我對運動員的表視圖,其中顯示數據庫中的所有運動員。我想將字幕文本設置爲Eval屬性,假設問題是「date_recorded」,每個運動員可能會有1個以上的eval。我需要選擇evalArray中的最後一個對象,然後顯示每個運動員的相關Eval屬性,因此每個運動員的字幕文本可能會有所不同。我將如何爲我桌子上的每個細胞做這件事?這裏是我到目前爲止有:

allathletes.m

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Athlete Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

    Athlete *athlete = (Athlete *)[athleteArray objectAtIndex:indexPath.row]; 
    cell.textLabel.text =[athlete full]; 
    cell.detailTextLabel.text = //eval attribute "date_recorded" 

    AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 
    _managedObjectContext = [appDelegate managedObjectContext]; 

    NSFetchRequest *request = [[NSFetchRequest alloc] init]; 

    NSFetchRequest *athleteRequest = [[NSFetchRequest alloc] init]; 

    [athleteRequest setEntity:[NSEntityDescription entityForName:@"Athlete" inManagedObjectContext:_managedObjectContext]]; 
    NSError *athleteError = nil; 
    NSPredicate *athletePredicate = [NSPredicate predicateWithFormat:@"full == %@", athlete.full]; 
    [athleteRequest setPredicate:athletePredicate]; 
    NSArray *results = [_managedObjectContext executeFetchRequest:athleteRequest error:&athleteError]; 
    Athlete *currentAthlete = [results objectAtIndex:0]; 

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"whosEval == %@", currentAthlete]; 
    [request setPredicate:predicate]; 
    NSEntityDescription *eval = [NSEntityDescription entityForName:@"Eval" inManagedObjectContext:_managedObjectContext]; 
    [request setEntity:eval]; 



    NSSortDescriptor *sortDescriptor = 
    [[NSSortDescriptor alloc] initWithKey:@"date_recorded" 
           ascending:NO 
           selector:@selector(localizedCaseInsensitiveCompare:)]; 
    NSArray *sortDescriptors = [[NSArray alloc]initWithObjects:sortDescriptor, nil]; 
    [request setSortDescriptors:sortDescriptors]; 

    NSError *error = nil; 
    NSMutableArray *mutableFetchResults = [[_managedObjectContext executeFetchRequest:request error:&error] mutableCopy]; 
    if (mutableFetchResults == nil){ 
     //handle error 
    } 

    NSMutableArray *lastEvalArray = mutableFetchResults; 

Eval *lastEval = lastEvalArray.lastObject; 

cell.detailTextLabel.text = lastEval.date_recorded; 

    return cell; 
} 

回答

1

如果date_recorded是一個NSDate屬性,那麼你可以做

Athlete *athlete = (Athlete *)[athleteArray objectAtIndex:indexPath.row]; 
NSDate *lastRecorded = [athlete valueForKeyPath:@"@max.evals.date_recorded"]; 

,然後使用NSDateFormatter轉換lastRecordedNSString和 將其分配給cell.detailTextLabel.text

+0

date_recorded已被轉換。這是一個nsstring。 –

+0

@ user2674329:字符串是如何格式化的?要找到最後的日期,他們必須以某種方式進行比較/排序。 (使用NSDate對象會更容易。) –

+0

它具有日期的值,但是是一個字符串。像這樣:「2013年8月18日」。它被妥善分類。 –