我在使用 CoreData 时遇到了很多困难。学习曲线非常陡峭。我是一个非常新手的 XCode 用户,对数据库也不太了解。我花了很长时间试图弄清楚我的程序采用什么方法,并且一直在跌跌撞撞。
我尝试学习 sqlite,因为这就是我认为 coreData 使用的。因此,我在 LibreOffice 中创建了一个包含许多关系的庞大数据库,因为它是一个免费的数据库程序。然后,我意识到它是在 HSQL 中,它与 SQLite 不同。因此,我不得不将所有内容都导出到 .csv 中并失去了我的关系,然后支付了一个名为 SQLiteManager 的蹩脚程序来创建 SQLite 数据库表。
完成所有设置后,我再次开始查看 CoreData,我意识到 CoreData 不允许您使用外部 sqlite 数据库!啊。在这一点上,我很沮丧。所以,现在,我再次从头开始使用 coreData,并以托管对象形式构建了包含实体、属性、关系等的空模型。我已经检查过它是否能够在构建时创建空的“专有”coreData SQLite 数据库,并且可以正常工作。
但是现在,我正在尝试填写 managedObjects,但在关系方面遇到了问题
这就是我的一个头文件的样子。
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@class ORGAN, SPECIMEN, SYSTEM, TISSUE;
@interface CELL : NSManagedObject
@property (nonatomic, retain) NSString * cellDescription;
@property (nonatomic, retain) NSString * cellName;
@property (nonatomic, retain) NSString * cellSID;
@property (nonatomic, retain) NSSet *organs;
@property (nonatomic, retain) NSSet *specimens;
@property (nonatomic, retain) NSSet *systems;
@property (nonatomic, retain) NSSet *tissues;
@end
@interface CELL (CoreDataGeneratedAccessors)
- (void)addOrgansObject:(ORGAN *)value;
- (void)removeOrgansObject:(ORGAN *)value;
- (void)addOrgans:(NSSet *)values;
- (void)removeOrgans:(NSSet *)values;
- (void)addSpecimensObject:(SPECIMEN *)value;
- (void)removeSpecimensObject:(SPECIMEN *)value;
- (void)addSpecimens:(NSSet *)values;
- (void)removeSpecimens:(NSSet *)values;
- (void)addSystemsObject:(SYSTEM *)value;
- (void)removeSystemsObject:(SYSTEM *)value;
- (void)addSystems:(NSSet *)values;
- (void)removeSystems:(NSSet *)values;
- (void)addTissuesObject:(TISSUE *)value;
- (void)removeTissuesObject:(TISSUE *)value;
- (void)addTissues:(NSSet *)values;
- (void)removeTissues:(NSSet *)values;
@end
并且,在我的 applicationDelegate 文件中,我正在尝试使用资源部分中的自定义“@”分隔文件填充我的 coreData 数据库(尽管我认为我可以运行 SQLite 连接到我的旧数据库并执行相同操作,但这是另一个问题)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//cells
NSString *paths = [[NSBundle mainBundle] resourcePath];
NSString *bundlePath = [paths stringByAppendingPathComponent:@"cells"];
NSString *dataFile = [[NSString alloc] initWithContentsOfFile:bundlePath];
NSArray *dataRows = [dataFile componentsSeparatedByString:@"\n"];
for (int i = 0 ; i < [dataRows count] ; i++)
{
NSArray *dataElements = [[dataRows objectAtIndex:i] componentsSeparatedByString:@"@"];
if ([dataElements count] >= 2)
{
CELL *cellMO = [NSEntityDescription insertNewObjectForEntityForName:@"CELL"
inManagedObjectContext:[self managedObjectContext]];
cellMO.cellName = [dataElements objectAtIndex:0];
cellMO.cellDescription = [dataElements objectAtIndex:1];
cellMO.organs ???????????????????????????? can't make this work.
}
}
当我用这条线构建时它一直在中断,我尝试了几种不同的方法。它一直说 cellMO.organs 需要一个 NSSet,但是当我尝试给它一个 NSSet 时它失败了。所以,我迷路了。请帮忙?????????