如何显示核心数据值?

时间:2012-12-03 23:51:03

标签: objective-c uitableview core-data uiviewcontroller nsstring

我有一个基本UITableView,我可以使用Core Data添加项目,如果需要也可以删除。

假设我向UITableView添加了5个项目。我还想在另一个视图上显示这五个项目,最好是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();
}

1 个答案:

答案 0 :(得分:0)

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

在需要访问相关托管对象的其他视图中,您需要通过构造NSFetchRequest并针对NSManagedObjectContext执行该请求来获取它们。如果不了解您的模型,我无法提供任何实质性的例子;但那是基本的想法。

根据您的需求,核心数据可能是理想的,也可能是过度的。通过将Core Data用于对象图持久性技术可以获得很多好处 - 但是有很多细微之处。正如Apple所说。 “核心数据不是入门级技术。” (Apple,“核心数据入门”

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

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

编辑:

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