如何显示我的核心数据值?
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 上。您或其他任何人可以推荐其他方法来完成此操作吗?以上是关于如何显示我的核心数据值?的主要内容,如果未能解决你的问题,请参考以下文章