我想使用Core Data
存储5-10本书的文本。鉴于每本书可能很长(想想30,000行),我会更好:
NSString
attributes
用于bookTitle,lineNumber,lineText等)或似乎选项2更清晰,但只是不确定是否有多个实体是明智的,模式相同,只是名称不同(逻辑上有意义,因为书籍有不同的名称)
使用下面的代码段进行编辑。如果我想过滤只搜索一个图书实体,我会使用谓词吗?
NSManagedObjectContext *context = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:version
inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSError *error;
NSArray *fetchedObjects = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
答案 0 :(得分:1)
此类事物的标准模型是创建一个名为 Book 的NSManagedObject
,并让该实体具有书籍的各种属性,例如:标题,作者,文本等。
@interface Book : NSManagedObject {}
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *author;
@property (nonatomic, copy) NSString *text;
...
如果你想将文本分成章节等等,显然会比这更复杂。这实际上取决于你的整体设计目标。
答案 1 :(得分:1)
您可以将其存储在单个实体中,并告诉Core Data将文本字段设置为单独的"外部"记录文件,如果性能受损。
答案 2 :(得分:1)
更好的方法是创建2个实体,一个具有Book的metaData,第二个具有实际文本。两个实体都使用一对一关系进行映射,我们可以创建适当的删除规则。这种方法的优点是当您加载书籍列表时,在UITableView / UICollectionView中可以显示标题/作者详细信息,并且元数据将更轻松。当用户点击特定书籍(标题/作者)时,我们可以使用映射获取文本并使用viewController显示它。当我们创建映射时,我们已经获得了从关系实体中添加/删除项目的方法
以下是相同的实现:
@interface Book : NSManagedObject {}
@property (nonatomic, strong) NSString *title;
@property (nonatomic, strong) NSString *author;
@property (nonatomic, strong) NSString *genre;
@property (nonatomic, strong) NSString *publication;
....
@interface Bookdata : NSManagedObject {}
@property (nonatomic, strong) NSString *Text;