如何显示我的核心数据值?

Posted

技术标签:

【中文标题】如何显示我的核心数据值?【英文标题】:How do I display my Core Data values? 【发布时间】:2012-12-03 23:51:02 【问题描述】:

我有一个基本的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();

【问题讨论】:

NSUserDefaults 每个键只存储一个值。因此,您每次都有效地覆盖了为“主要”键存储的值。无论如何,您应该查看 NSFetchRequest 以获取您需要的记录,遍历结果并以这种方式创建您的 PDF。见这里mobile.tutsplus.com/tutorials/iphone/iphone-core-data 【参考方案1】:

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

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

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

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

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

编辑:

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

【讨论】:

我不能 100% 确定这是否适合我。最终,我想要一个可以编辑的表格(添加行、删除行、重新排列),每一行都可以点击到详细视图以输入更多信息,然后将所有信息很好地显示到 PDF 上。您或其他任何人可以推荐其他方法来完成此操作吗?

以上是关于如何显示我的核心数据值?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据查找具有特定值的实体在我的核心数据之间进行迭代

如何更改核心数据中的记录值

表视图控制器不显示更新的核心数据值

核心数据 - 如何将核心数据中的属性值分配给变量

如何在核心数据中添加每个对象的十进制值以得出总数?

如何在 ios 中的单元格上显示核心数据?