需要 xcdatamodel 吗?

Posted

技术标签:

【中文标题】需要 xcdatamodel 吗?【英文标题】:Is xcdatamodel needed? 【发布时间】:2015-07-23 10:47:05 【问题描述】:

这是我的 ios 应用程序中使用 CoreData 的实体对象。

#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>

#import "Price.h"

@interface DataPrice : NSManagedObject

@property (nonatomic) NSInteger id;
@property (nonatomic, retain) NSNumber *ron95;
@property (nonatomic, retain) NSNumber *ron92;
@property (nonatomic, retain) NSNumber *dieselNormal;
@property (nonatomic, retain) NSNumber *dieselSpecial;
@property (nonatomic, retain) NSDate *postDate;

+ (instancetype)insertDataPriceWithPrice:(Price*)price
                  inManagedObjectContext:(NSManagedObjectContext *)managedObjectContext;

+ (instancetype)fetchDataPriceInManagedObjectContext:(NSManagedObjectContext *)managedObjectContext;

+ (Price*)fetchPriceInManagedObjectContext:(NSManagedObjectContext *)managedObjectContext;

@end


#import "DataPrice.h"

@implementation DataPrice

@dynamic id;
@dynamic ron95;
@dynamic ron92;
@dynamic dieselNormal;
@dynamic dieselSpecial;
@dynamic postDate;

+ (instancetype)insertDataPriceWithPrice:(Price*)price
             inManagedObjectContext:(NSManagedObjectContext *)managedObjectContext

    DataPrice* dataPrice = [NSEntityDescription insertNewObjectForEntityForName:self.entityName
                                               inManagedObjectContext:managedObjectContext];
    dataPrice.id = price.id;
    dataPrice.ron95 = price.ron95;
    dataPrice.ron92 = price.ron92;
    dataPrice.dieselNormal = price.dieselNormal;
    dataPrice.dieselSpecial = price.dieselSpecial;
    dataPrice.postDate = price.postDate;

    return dataPrice;


+ (NSString*)entityName

    return @"Price";


+ (instancetype)fetchDataPriceInManagedObjectContext:(NSManagedObjectContext *)managedObjectContext 
    NSEntityDescription *entity = [NSEntityDescription entityForName:self.entityName inManagedObjectContext:managedObjectContext];

    if (!entity) 
        return NULL;
    


    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"postDate" ascending:NO];

    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    request.entity = entity;
    request.sortDescriptors = @[ sortDescriptor ];
    request.fetchLimit = 1;

    NSError *error;
    NSArray *fetchResults = [managedObjectContext executeFetchRequest:request error:&error];

    DataPrice *result = fetchResults.firstObject;

    return result;


+ (Price*)fetchPriceInManagedObjectContext:(NSManagedObjectContext *)managedObjectContext 
    DataPrice *dataPrice = [self fetchDataPriceInManagedObjectContext:managedObjectContext];

    Price *price = [[Price alloc] init];
    price.id = dataPrice.id;
    price.ron92 = dataPrice.ron92;
    price.ron95 = dataPrice.ron95;
    price.dieselNormal = dataPrice.dieselNormal;
    price.dieselSpecial = dataPrice.dieselSpecial;
    price.postDate = dataPrice.postDate;

    return price;



@end

我将类命名为 DataPrice,但希望实体为 Price

我的应用程序是否需要xcdatamodel?如何定义?

【问题讨论】:

【参考方案1】:

A.是的,您需要一个数据模型。您可以通过 File | 获得它新的…… | 文件和工作表iOS | 核心数据 | 数据模型

不过,从一开始就创建 Core Data 应用程序会更容易。

B.类和实体(类型)可以有不同的名称。您只需将具有不同名称的类分配给实体类型。 (分配了默认的NSManagedObject,所有不称为NSManagedObject 的实体类型有什么不同的名称。;-))但是没有理由这样做。

【讨论】:

DenkoStation.xcdatamodeld 是否会自动转换为 DenkoStation.momd 我正在使用一个发布在 GitHub 上的项目。 ORM 对我来说并不是一个新概念,我从 TopLink 开始就使用它。所以我想我会在一个示例项目上走运。 由于 ORIM,ORM 经常不得不在 OOP 和 rDBMS 之间做出决定。每个实施都需要不同的决定。了解一个对理解另一个没有多大帮助。

以上是关于需要 xcdatamodel 吗?的主要内容,如果未能解决你的问题,请参考以下文章

重命名 xcdatamodel 文件

从 JSON 生成 Xcdatamodel 文件

从 Xcdatamodel 生成 JSON 文件

向现有 xcdatamodel 添加属性会使 Xcode 4.2 崩溃

xcdatamodeld 不可见 xcdatamodel

xcdatamodel 中的错误