【问题标题】:Mapping Business Objects with Core Data in iOS在 iOS 中使用核心数据映射业务对象
【发布时间】:2012-05-24 01:53:54
【问题描述】:

我是 iOS 新手。谁能告诉我如何将我的 BO 与 Core Data 映射,以便我可以在我的项目中重用映射。这是我的代码

- (void) saveData
{       
    CoredataAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

    NSManagedObjectContext *context = [appDelegate managedObjectContext];

    NSManagedObject *newContact;

    newContact = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:context];

    [newContact setValue:firstName.text forKey:@"firstName"];
    [newContact setValue:lastName.text forKey:@"lastName"];
    [newContact setValue:driverLicenceno.text forKey:@"driverLicenceNumber"];
    [newContact setValue:state.text forKey:@"state"];
    [newContact setValue:phoneNO.text forKey:@"phoneNumber"];
    [newContact setValue:injuryStatus.text forKey:@"injuryStatus"];
    [newContact setValue:emailAddress.text forKey:@"emailAddress"];

    NSLog(@"fName%@",firstName.text);
    firstName.text = @"";
    NSLog(@"fName%@",firstName.text);
    lastName.text = @"";
    driverLicenceno.text = @"";
    state.text = @"";
    phoneNO.text = @"";
    injuryStatus.text = @"";
    emailAddress.text = @"";

    NSError *error;
    [context save:&error];
    status.text = @"Person saved";
}

除此之外,还有其他方法可以将我的 BO 与 coredata 映射吗?

【问题讨论】:

  • 在 Core Data 中映射 BO 是什么意思?你已经有一个数据模型了吗?正如我从您的代码中看到的,您正在使用 Person 实体。那么,你的目标是什么?谢谢。
  • 我的目标是将我的 BO 映射到 coredata,这样它将通过映射模型对象自动填充我的 personInfoBO,但无法创建映射模型。这是我关注的链接developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/…
  • 使用映射模型是指数据模型吗?
  • 告诉我如何在核心数据中应用更新、删除、查找第二个最大值、连接、查看等 sql 查询?

标签: ios core-data mapping


【解决方案1】:

告诉我如何应用 sql 查询,如更新、删除、查找第二个 核心数据中的 max、joins、view 等

由于 Core Data 涵盖了很多东西,我可以给出一些提示。

首先,处理Core Data 意味着处理“存在”在一种称为NSManagedObject 的暂存器中的托管对象。将其视为一种容器图,其中包含根据您创建的数据模型从文件(例如 sql 文件)中检索到的对象。除非您不保存上下文,否则更改会驻留在内存中并且不会物理存储。

[moc save:&error];

使用NSManagedObject,您可以创建、更新、查询或删除对象。当然,还可以做其他事情。

如果您需要插入一个新的托管对象(在您的数据模型中声明),您可以使用insertNewObjectForEntityForName:inManagedObjectContext:

如果您需要执行查询,您需要查看NSFetchRequest 类。设置NSFetchRequest 相当于 SQL 语言中的 SELECT 语句。

这里是一个简单的例子:

NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Person" inManagedObjectContext:moc]];

NSError *error = nil;
NSArray *results = [moc executeFetchRequest:request error:&error];

// error handling code

数组results 包含sqlite 文件中包含的所有托管对象(人)。如果要获取特定对象(或更多对象),则需要对该请求使用谓词。例如:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"firstName == %@", @"John"];
[request setPredicate:predicate]; 

在这种情况下,results 包含属性等于John 的对象(人)。设置谓词等于将 WHERE 子句放在 SQL 语句中。

如果您想设置连接、视图等,您需要在实体之间执行正确的NSPredicates(基于关系和属性),并让 Core Data 为您执行行内容。

如果你需要删除一个对象,你需要这样做:

[moc deleteObject:managedObjectToDelete];

如果您需要更新托管对象,您必须创建一个获取请求并检索您正在寻找的对象(例如,您可以为每个对象提供一个特定的 id 并使用您的 id 设置一个谓词想)。如果 fetch 请求检索到一些对象,那么您可以更新它们。

这些是指导您使用 Core Data 的简单提示。我建议你阅读Core Data Programming Guide。在那里你可以找到很多东西。如果你愿意,你可以从一个很好的使用 Core Data 的教程开始,看看www.raywenderlich.com

如果你想要别的东西,请告诉我。

希望对你有帮助。

【讨论】:

    【解决方案2】:

    Tahir 首先你必须创建你已经创建的 Coredata 数据库。接下来在 coredata 模型的实体面板中选择表。右键单击项目层次结构树中的模型。选择新文件,选择 coredata 和 NSManagedObjectSubclass 然后保存。它为 coredata 表创建模型类,您可以在方法中使用它。

    此图像显示选择 db 和 table 以右键单击并选择 NSManagedObjectSubClass

    此图像显示了第一个 coredata 的选择,而不是 NSManagedObjectSubClass,然后当您单击下一步时,它会显示面板以提供名称并将其保存在您的项目中。 希望对你有帮助,谢谢!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-04
      • 1970-01-01
      • 1970-01-01
      • 2017-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多