【问题标题】:How To Achieve This Using Core Data如何使用核心数据实现这一目标
【发布时间】:2011-04-22 03:16:19
【问题描述】:

这是我的数据模型的图片:

我有一个视图,用户可以在其中输入重量和次数的数字。如何使用 NSFetchedResultsController(或更好的选择)将其保存为“Set”的实例。

然后我希望用户能够为特定的“练习”制作多个“设置”。用户可以选择做 5 种不同的“练习”。我希望练习总数为 1 个“会话”。

并且“会话”将与时间戳一起存储。这样我就可以搜索并调出今天或 30 天内等的数据。

【问题讨论】:

    标签: iphone objective-c core-data


    【解决方案1】:

    首先,使用 Apple 的模板或其他示例代码设置您的“核心数据堆栈”(我通常为此使用自定义单例)。您将创建 NSManagedObjectModel、NSManagedObjectContext 和 NSPersistentStoreCoordinator 的实例。

    要创建新的托管对象,我喜欢使用 NSEntityDescription 类方法insertNewObjectForEntityForName:inManagedObjectContext:(我确实使用mogenerator,但它就是这样使用的)。

    您可以将所有对象称为 NSManagedObject 并使用setValue:forKey: 等;但我建议为您的实体生成自定义类文件(Xcode 可以这样做或尝试 mogenerator)。

    例如(假设您生成类文件并且 NSManagedObjectContext 对象在这里是“moc”):

    Set *set = [NSEntityDescription insertNewObjectForEntityForName:@"Set" inManagedObjectContext:moc];
    
    set.weight = 100;
    set.reps = 10;
    
    NSMutableSet *sets = [NSMutableSet set];
    
    [sets addObject:set];
    
    Exercise *exercise = [NSEntityDescription insertNewObjectForEntityForName:@"Exercise" inManagedObjectContext:moc];
    
    exercise.relationship = sets; // you should name this relationship something like "sets"
    

    然后,您可以构建练习并将它们添加到一个集合中,并将该集合分配给 Session 的一对多练习关系(同样,“练习”是一个更好的名称)。

    要保存,只需在您的 NSManagedObjectContext 对象上调用 save:

    另外,我注意到您的模型中没有反向关系。强烈建议您始终保持反向关系。

    【讨论】:

    • 感谢 gerry3!实际上,我已经在我的应用程序中设置了所有核心数据堆栈,因为我使用它来保存用户的例程(这是另一个实体)。我将“Exercise”重命名为“Exercises”并设置反向关系。它有很多信息,所以让我重新阅读您写的内容以更好地理解它。
    • 这是我更新的数据模型 (box.net/shared/static/rah3krt9fs.png)。 “例程”是为了让用户可以创建自定义例程,从存储在 .plist 中的练习中进行选择。我在想日常活动应该与锻炼有关吗?
    • 保持“锻炼”不变。实体名称通常是单一大小写的。我的建议是将会话中的一对多关系命名为“练习”。同样,将从练习到集合的一对多关系命名为“集合”。
    • 谢谢 gerry3。这是更新的模型 (box.net/shared/static/n099fzk51k.png)。我仍然认为常规应该在那里的某个地方建立关系。
    • 正确,听起来您需要从例程到练习的一对多关系(例如,名为“练习”)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多