我有一个基本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();
}
答案 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
。