0

我有一个基础UITableView,我可以使用 Core Data 添加项目以及在需要时删除。

假设我向UITableView. 我还想在另一个视图上显示这五个项目,最好是 PDF。

实现这一目标的最佳方法是什么?

我也在尝试使用NSUserDefaults,但唯一出现的值是输入的最后一个值。

这是使用的一些主要代码。任何建议表示赞赏!

这是UIViewController我输入文本的地方:

-(NSManagedObjectContext * )managedObjectContext
{
    return [(AppDelegate *) [[UIApplication sharedApplication] delegate] managedObjectContext];
}

-(void)saveButtonTapped:(id)sender
{

    [self.managedObjectContext save:nil];


    if (_majorTextField.text == nil)
    {
        _majorString = @"";
    }
    else
    {
        _majorString = [[NSString alloc] initWithFormat:@"%@", _majorTextField.text];
        self.task.title = self.majorTextField.text;
        NSUserDefaults * majorDefault = [NSUserDefaults standardUserDefaults];
        [majorDefault setObject:_majorString forKey:@"major"];
    }
    [self.navigationController popViewControllerAnimated:YES];
 }

这是我在我的 PDF 中添加文本的地方:

 +(void)createPDF:(NSString*)filePath
 {
    // Create the PDF context using the default page size of 612 x 792.
    UIGraphicsBeginPDFContextToFile(filePath, CGRectZero, nil);
    // Mark the beginning of a new page.
    UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, 612, 792), nil);

    NSUserDefaults * majorDefault = [NSUserDefaults standardUserDefaults];
    NSString * majorString = [majorDefault stringForKey:@"major"];

    [PDFRenderer drawText:majorString inFrame:CGRectMake(35, 190, 300, 50) fontName:@"TimesNewRomanPSMT" fontSize:14];

    UIGraphicsEndPDFContext();
}
4

1 回答 1

0

NSManagedObjectContext在您对视图控制器中的表示对象进行更改之前,您正在保存您的。在saveButtonTapped:你保存上下文但只是稍后设置self.task.title ... 也许我错过了一些东西;但我认为您想在更改后保存上下文self.task.title

在需要访问相关托管对象的其他视图中,您需要通过构造 anNSFetchRequest并针对NSManagedObjectContext. 在不了解您的模型的情况下,我无法举出任何实质性的例子;但这是基本的想法。

根据您的需要,Core Data 可能是理想的,也可能是矫枉过正。将 Core Data 用于您的对象图持久性技术有很多好处——但也有很多微妙之处。正如苹果所说。“Core Data 不是入门级技术。” (Apple,“核心数据入门”

我们可能都对此感到内疚,但是您应该传入一个错误对象[self.managedObjectContext save:nil];并处理返回值,因此:

NSError *saveError = nil;
if( ![[self managedObjectContext] save:&saveError] ) {
    // do something with saveError
}

编辑:

Core Data 适合您在评论中描述的内容。这只是理解持久存储、托管对象上下文等的基本原理的问题。您使用 Core Data 获得的是一组在表视图中显示数据的便利,即NSFetchedResultsController.

于 2012-12-04T02:04:06.800 回答