Tag: 核心数据

iOS – 用MagicalRecordpipe理两个CoreData模型

我正在使用MagicalRecord来处理CoreData模型,这个模型很可能会在未来版本化。 现在我需要向我的应用程序添加一个预先填充的数据库,其中包含大约80000个对象的实体; 这个数据是静态的,我不希望它会改变。 如果我将这个实体添加到现有模型中,每次模型更改时都需要生成一个新的种子数据库,这增加了项目的复杂性。 更好的解决scheme是创build第二个模型,只为新的实体:种子数据库将永远不会改变,第一个模型可以照顾它的版本,无论新的模型。 这两个模型之间不需要任何关系。 在现有的模型之上,我也使用了RestKit,下面是一切设置: [MagicalRecord setupAutoMigratingCoreDataStack]; RKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithPersistentStoreCoordinator: [NSPersistentStoreCoordinator MR_newPersistentStoreCoordinator]]; self.objectManager.managedObjectStore = managedObjectStore; [managedObjectStore createManagedObjectContexts]; // bind RK with MagicalRecord [NSManagedObjectContext MR_setRootSavingContext: managedObjectStore.persistentStoreManagedObjectContext]; [NSManagedObjectContext MR_setDefaultContext: managedObjectStore.mainQueueManagedObjectContext]; managedObjectStore.managedObjectCache = [[RKFetchRequestManagedObjectCache alloc] init]; 新模型将不会与RestKit一起使用。 MagicalRecord可行吗? 我已经通过它的文档,但可以find有用的东西。 非常感谢,DAN UPDATE 让我们用一个xcode编辑器创build一个带有4个实体(Foo,Bar,Blarg,Baz)的db模型。 模型编辑器有一个不能删除的默认configuration,所以我们只能添加两个新configuration(SeedConfiguration和UserConfiguration),将Foo添加到第一个,另外三个添加到第二个。 这两个configuration应保存在seed.sqlite和user.sqlite中。 在这一点上,我想运行一个脚本,它填充了数千个Foo对象的seed.sqlite:一旦生成这个文件将被放入项目资源并在启动时复制到应用程序目录中; user.sqlite将在运行时生成,并用于pipe理用户信息。 当我以“脚本”模式启动应用程序来填充seed.sqlite时,两个sqlite文件都正确创build,但它们都包含所有的实体,而我期望在seed.sqlite和Bar,Blarg,Baz中findFoo user.sqlite。 我是否应该插入Foo对象并复制生成的seed.sqlite,即使它包含所有其他(空)实体? 以下是如何创build一个协调器中的两个持久性存储: https : //stackoverflow.com/a/24022978/2515181 […]

将iOS Core Data添加到现有项目 – 解包可选值时发生错误

我试图将CoreData添加到现有的项目。 所以,我复制了一个新项目的数据模型(SWS.xcdatamodel)和AppDelegate文件。 然后我改变了AppDelegate方法中的项目名称和数据模型名称 import UIKit import CoreData @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // Override point for customization after application launch. return true } func applicationWillResignActive(application: UIApplication) { // Sent when the application is about to move from active to inactive state. […]

Mogenerator和ARC在XCode 4.6

我刚刚开始将mogenerator与核心数据集成到一个应用程序项目中,按照最佳实践推荐。 我添加了以下构build脚本,并带有一个标志来支持ARC。 mogenerator -m FavesDataModel.xcdatamodeld/FavesDataModel.xcdatamodel –template-var arc=true 该脚本成功地构build了所有必需的类和子类。 那时候,我把所有生成的文件复制到我的项目中。 最初,我得到了一个干净的成功构build。 但是,当尝试另一个生成(不作任何更改)时,会出现以下ARC错误: ARC forbids Objective-C objects in structs or unions 在用下划线生成的文件中发生错误。 有趣的是,当构build脚本构build文件如下所示: extern const struct FavoriteAttributes { __unsafe_unretained NSString *maxCFS; __unsafe_unretained NSString *maxFeet; __unsafe_unretained NSString *minCFS; __unsafe_unretained NSString *minFeet; __unsafe_unretained NSString *stationIdentifier; __unsafe_unretained NSString *stationRealName; __unsafe_unretained NSString *stationState; } FavoriteAttributes; 但是,在成功构build之后,XCode将删除__unsafe_unretained属性。 使用mogenerator与ARC打开有已知的问题? 任何想法的解决scheme或解决方法? 谢谢! V

IOS,SWIFT,核心数据+多个表

我对ios和swift很陌生。 在单个视图中,如何将两个不同的获取请求发送到两个不同的表视图? 我有一个类级别的fetchReq函数,它使用NSPredicate来取一个参数,给我不同的结果,我想要的。 唯一知道哪个表是哪个tablView func的地方,但它看起来像决定哪些数据加载立即在viewDidLoad。 难道某种灵魂会帮助我重构核心数据代码,以便为每个表获取不同的获取请求? import UIKit import CoreData class CustomTableViewCell : UITableViewCell { @IBOutlet var l1: UILabel? @IBOutlet var l2: UILabel? func loadItem(#number: String, name: String) { l1!.text = number l2!.text = name } } class ViewController: UIViewController, UITableViewDelegate, NSFetchedResultsControllerDelegate, UITableViewDataSource { @IBOutlet var tableView1: UITableView! //this is my second table – Ive […]

应用程序在创buildCoredata的managedObjectModel时崩溃

我从下面的代码创build一个managedObjectModel对象 – (NSManagedObjectModel *)managedObjectModel { if (managedObjectModel_ != nil) { return managedObjectModel_; } NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"DataHouse" ofType:@"momd"]; NSURL *modelURL = [NSURL fileURLWithPath:modelPath]; managedObjectModel_ = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; return managedObjectModel_; } 我在我的xcode项目中有DataHouse.xcdatamodeld文件。 这段代码工作得很好。 现在,来解决这个问题….通过遵循这个美妙的链接,我已经从我的代码中删除了一些错误 。 我已经将我的框架包含在一个新的项目中,并尝试运行它。 该应用程序正好在上面的代码库中崩溃。 我也知道它的原因,但无法解决它。 这里的问题是,在创buildmanagedObjectModel时,编译器正在主包中查找名为DataHouse.xcdatamodeld的文件。 但这个文件是新框架的一部分,并不在主包中。 现在,我该如何解决这个问题..任何想法请…

核心数据获取:无法识别的select器发送到实例

A – >> B 我有两个实体A和B,每个都是一对多的关系。 我试图通过分组访问特定的B属性值和所有A实体属性。 但是我得到错误作为[_NSObjectID_48_1 userName] :无法识别的select器发送到实例当我尝试访问B(即一个)的关系对象。 NSManagedObjectContext *context = [[SamCoreDataHelper sharedInstance] managedObjectContext]; NSFetchRequest *fr = [[NSFetchRequest alloc] initWithEntityName:@"B"]; NSError *error; NSExpressionDescription *total = [[NSExpressionDescription alloc] init]; [total setExpression:[NSExpression expressionWithFormat:@"@sum.marks"]]; [total setName:@"total"]; [total setExpressionResultType:NSDecimalAttributeType]; [fr setPropertiesToFetch:[NSArray arrayWithObjects:@"subject",@"a", total, nil]]; [fr setPropertiesToGroupBy:[NSArray arrayWithObjects:@"subject", @"a", nil]]; [fr setRelationshipKeyPathsForPrefetching:[NSArray arrayWithObject:@"a"]]; fr.returnsObjectsAsFaults = NO; [fr setResultType:NSDictionaryResultType ]; […]

我是否需要启用WAL模式将.SQLite从包复制到Document目录?

我目前的应用程序只能复制.sqlite文件(WAL MODE = DELETE) 。 一切顺利,新复制的myfile.sqlite也包含完美的数据。 当我执行一个获取请求时,执行没有错误,BOOL(成功)是1。 但是返回的数组总是EMPTY。 Core Data Basics: Preload Data and Use Existing SQLite Database 本教程告诉我,我需要将3个文件( .sqlite , .sqlite-wal , .sqlite-shm )复制到Document目录中。 这是否意味着我需要启用WAL模式并从头开始重新执行所有操作? 在Xcode 10中,我们仍然无法复制一个.sqlite文件? 有人可以澄清这一点?

iOS:如何使用谓词NSexpression检查用户input的有效性和一致性

在我的应用程序使用coredata我有一个实体具有两个属性GridValue (数值), RecordingDate (NSdate))。 一个tableview中的用户可以每天input这两个值,并用一个获取控制器logging。 这里有更多的理解是关于这个问题的两个观点的截图: AddviewController是用户添加新值的地方,当用户点击静态tableview中的两个字段时,他被redirect到“Zahl Datum”视图进行编辑。 我想要做的是检查用户input的GridValue ,并显示一个警告(可能是一个警告消息,或者在这种情况下,当新input的值小于先前input的值时,将显示或popup的页脚消息在不同的日子(以前存储的RecordingDate值(来自CoreData模型的NSdateinput属性))。 示例说明当前用户是否input:Zahlerstand = 1254和Datum: 12,05,2013 ,在之前的logging中,值分别为:Zahlerstand = 1300和Datum: 11.05.2013。 那么我们就会看到,在连续的date里, 新价值比旧价值要小 。 在这种情况下,应该显示警告 (如在tableview部分页脚中,然后才能点击addviewcontroller中的“save”button。 请尽可能帮助一些示例代码。 先谢谢你,

核心datedate从dateselect器文本字段比较

我正在模型中使用datetypes成功保存date在核心数据。 date保存格式如2017-04-02 14:56:41。 当我retreive我想过滤date与当前date文本字段有一个像2017年4月2日的格式。我使用谓词比较两个date,但应用程序由于差异坠毁或可能是当前date是在string中。 let predicate = NSPredicate(format: "(dateSchedule >= %@ )", fromTextField.text!) 核心数据date:2017-04-02 14:56:41 currentdate textfielddate:2017年4月2日 任何帮助?

fetchedObjects(NSArray)计数返回0,当它充满对象

我在我的核心数据中有2个托pipe对象: CoreDataTrap和CoreDataAllTraps 。 到目前为止,CoreDataTrap的更新,添加,删除,保存等操作都进行得很顺利。 但是,当我尝试使用第二个托pipe对象CoreDataAllTraps我没有错误的描述,只是一个简单的CoreDataAllTraps组的获取对象。 与CoreDataAllTraps : NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForName:kCORE_DATA_ALL_TRAPS_ENTITY inManagedObjectContext:self.managedObjectContext]; [fetchRequest setEntity:entity]; NSError *error = nil; NSArray *fetchedObjects = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error]; if (fetchedObjects == nil || fetchedObjects.count == 0) { NSLog(@"localizedDescription: %@, userInfo: %@", error.localizedDescription, error.userInfo); success = NO; } NSLog(@"%s success/fail: %@", __PRETTY_FUNCTION__, success?@"yes":@"no"); […]