我正在学习如何使用核心数据。我有一个应用程序,可以填充标记为User的实体的所有变量。然后,我将这些用户加载到表中。此时,可以选择用户并将其推送到新的视图控制器,此时,我将生成所选用户的PDF文件。因此,我想我误会了什么,我必须将其传递给视图控制器才能访问表中选择的核心数据。这是我的表视图控制器中的内容。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self.spinner startAnimating];
    ReportPDFViewController *reviewViewController = [[ReportPDFViewController alloc] init];
    reviewViewController.userInfo = [[self.fetchedResultsController fetchedObjects] objectAtIndex:indexPath.row];
    [self.navigationController pushViewController:reviewViewController animated:YES];
}

然后下一个视图说明
- (void)viewDidLoad
{
    [super viewDidLoad];

    UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithTitle:@"Email PDF"
                                                                  style:UIBarButtonItemStylePlain
                                                                 target:self
                                                                 action:@selector(emailPDF)];

    self.navigationItem.rightBarButtonItem = barButton;

    TrafficSignalProAppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];
    context = [appDelegate managedObjectContext];

    // Do any additional setup after loading the view.

    NSEntityDescription *entitydesc = [NSEntityDescription entityForName:@"User" inManagedObjectContext:context];
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    [request setEntity:entitydesc];


    NSError *error;
    NSArray *matchingData = [userInfo executeFetchRequest:request error:&error];

    NSString *Intersection;
    NSString *currentDay;
    for (NSManagedObject *obj in matchingData) {
        Intersection = sendIntersection;
        currentDay = sendDate;
    }



    NSString* fileName = [self getPDFFileName];

    [PDFRenderer drawPDF:fileName intersectionSearch:Intersection dateSearch:currentDay];

    [self showPDFFile];
    self.navigationItem.title = @"Report";

}

所以我试图传递所选行的NSManagedObjectContext然后加载。那之后我真的迷失了。我不确定传递托管对象上下文是否正确,如果不确定,我不知道ReportPDFViewController中的代码出了什么问题。我浏览了所有可以找到的教程。我的编程背景有限,因此非常感谢您的帮助。

最佳答案

reviewViewController.userInfo = [[self.fetchedResultsController fetchedObjects] objectAtIndex:indexPath.row];

这会将userInfo设置为NSManagedObject类型的对象(或子类)。
NSArray *matchingData = [userInfo executeFetchRequest:request error:&error];

这使用的是userInfo,就好像它是一个NSManagedObjectContext。我可以想象你在这里得到一个无效的选择器错误。

userInfo属性的实际类型是什么?它应该是NSManagedObject。

您无需在viewDidLoad中进行获取请求。核心数据不是数据库。您不需要每次都需要一些信息时就执行提取请求。一旦有了托管对象,就无需获取请求就可以获取与其相关的信息。如果您为其设置了自定义类,则可以将其视为常规的Objective-C对象。
for (NSManagedObject *obj in matchingData) {
    Intersection = sendIntersection;
    currentDay = sendDate;
}

这段代码没有意义。您正在循环,但是每次循环都将相同的值分配给变量。我不知道该值是什么,因为在您发布的代码中的其他任何地方都没有引用sendIntersectionsendDate。无论如何,您根本不会使用获取请求的结果。

我将对您需要做的事情做出一个疯狂的猜测:
Intersection = [userInfo valueForKey:@"intersection"];
currentDay = [userInfo valueForKey:@"date"];

完全是猜测,因为我不知道您的数据模型是什么。不需要循环,因为您只想要一个用户对象。

关于ios - 如何传递与表中所选行相对应的核心数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17054463/

10-10 20:47
查看更多