需要帮助NSFetchRequest

时间:2011-06-27 20:35:53

标签: iphone objective-c cocoa-touch core-data nspredicate

我有以下提取。我想获取谓词为true的Session对象。

任何人都可以告诉我,如果我这样做的话。我如何初始化/定义indexPath,因为它未被识别。

NSDate * searchDate = [formatter dateFromString:dateString];
NSFetchRequest *request = [[NSFetchRequest alloc]init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Session" inManagedObjectContext:self.managedObjectContext];
[request setEntity:entity];
NSPredicate * predicate1 = [NSPredicate predicateWithFormat:@" timeStamp == %@ ", searchDate];
[request setPredicate: predicate1];
[request setFetchBatchSize:20];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"timeStamp" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
NSError *error = nil; 
NSArray *array = [managedObjectContext executeFetchRequest:request error:&error];

SessionViewController *sessionViewController = [[SessionViewController alloc] initWithNibName:@"SessionViewController" bundle:nil];
self.selectedSession = (Session *)[array objectAtIndexPath:indexPath];

sessionViewController.selectedSession = self.selectedSession;

[self.navigationController pushViewController:sessionViewController animated:YES];
[sessionViewController release];
[sortDescriptor release];
[request release];
[sortDescriptors release];

1 个答案:

答案 0 :(得分:0)

然后,indexPath变量通常由tableview delegate / datasource回调提供。如果您使用的是UITableView,则您提供的最后两行代码应放在以下方法之一中。

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath

其他行应该是一种方法,以使您的数据显示在tableview中。

-(NSArray*)sessionData
{
    if(!_sessionData)
    {
        //FetchRequest stuff
        NSError *error = nil; 
        _sessionData = [managedObjectContext executeFetchRequest:request error:&error];
        //Error checking/logging
    }
    return _sessionData;
}

现在,以下@“timeStamp ==%@”仅在时间戳是精确日期到毫秒时才有效。如果这是你想要的好,否则使用日期范围@“timeStamp> =%@ AND timeStamp< =%@”。

注意:如果您发布了所有代码

,则会在多个对象上丢失您的版本
  

请求
sortDescriptor
sortDescriptors