Tag: 核心数据

核心数据performance:对更多对多关系的预测

使用SQL数据存储,我有这样一个模型: 类别< – >>项目 collections< – >>项目 品牌< – >>项目 每个左侧的实体都有一个多对多的关系,这个关系命名为Item到Item实体。 每一个分别与一个项目关系类别 , 收集 品牌和品牌相反。 我想用至less一个与特定集合和类别相关的项目获取所有品牌对象。 在自然语言中,我需要具有特定类别和特定集合的所有品牌的商品。 给定对象Category * myCategory和Collection * myCollection ,我用这种方式在Brand实体上构build一个谓词: NSPredicate *myPredicate = [NSPredicate predicateWithFormat:@"(ANY items.category == %@) AND (ANY items.collection == %@)",myCategory,myCollection]; 我得到正确的结果。 问题是性能。 太慢了! 我简化了三个层次的问题! 我们来考虑iOS多级别目录中的四个级别:应用程序显示可用类别,用户select类别,应用程序显示该类别中的集合,用户select集合,应用程序显示该集合中的品牌(以及已select的类别),用户select一个品牌,该应用程序显示在该品牌,集合和类别的材料… 说实话,我使用NSCompoundPredicate把每个用户的select放在子类中,dynamic构build最终的谓词。 但这个问题的目的并不重要。 在sql数据存储中, Item实体有超过30,000个(30k)的对象,而使用AND之间的关系非常缓慢(在上面的例子中,我注意到7-10秒的滞后时间来显示品牌)。 我会尽力: – 从类别,collections品和品牌实体中删除物品关系 – 在物品实体上,将类别 , collections 品牌和品牌关系replace为“category_id”,“collection_id”和“brand_id”等属性上的提取属性。 – 使用关键path或谓词来获取品牌而不使用多对多的关系。 […]

如何使用sqlite文件将数据预加载到iOS应用程序中

在新的Xcode 5版本之前,我可以通过引用项目中的文件将数据预加载到我的核心数据驱动的应用程序中。 但是,自升级我的XCode以来,我的JSON数据现在被保存到3个文件中: 一个空的.sqlite文件 一个.sqlite-wal文件 一个.sqlite-shm文件。 我如何将这些数据导入到我的应用程序? 在过去,我只需要复制sqlite文件,我就完成了。 现在,我不知道我应该复制什么文件。

获取时,托pipe对象具有不同的ID

即时通讯与Coredata工作,有一个概念,我没有得到; 我有2个托pipe对象ACConversation和ACMessages与一对多的关系,所以我保存一个消息相关联的对话,并试图获取他们回来的基础上: NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.conversation = %@", self.conversation]; 但与对象关联的ID是不同的(它似乎更多的是一个内存地址),并与上述谓词不提取任何东西: 2013-01-01 18:32:13.727 CoreDataTest[9325:c07] The message to fetch: <NSManagedObject: 0x818f680> (entity: ACMessage; id: 0x8160630 <x-coredata:///ACMessage/t451CC5A3-5972-479C-BC7C-6B91CA4DA23C4> ; data: { conversation = "0x818b770 <x-coredata:///ACConversation/t451CC5A3-5972-479C-BC7C-6B91CA4DA23C2>"; sentDate = "2013-01-01 23:32:13 +0000"; text = "Test message to Fetch through relationship!!!"; }) 2013-01-01 18:32:13.728 CoreDataTest[9325:c07] The conversation associated to the message: […]

Google Analytics与iOS整合时出错

我需要将谷歌分析添加到我的iOS应用程序, 我已经实施了这3个步骤。 第1步:下载谷歌分析库文件,并将此文件添加到项目, GAI.h GAITracker.h GAITrackedViewController.h -GAIDictionaryBuilder.h GAIFields.h GAILogger.h libGoogleAnalyticsServices.a CoreData.framework SystemConfiguration.framework libz.dylib 第2步:在didFinishLaunchingWithOptions添加此代码 – (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [GAI sharedInstance].trackUncaughtExceptions = YES; [GAI sharedInstance].dispatchInterval = 20; [[[GAI sharedInstance] logger] setLogLevel:kGAILogLevelVerbose]; [[GAI sharedInstance] trackerWithTrackingId:@"UA-XXXX-Y"]; } 第3步:例如,假设您有一个“主屏幕”视图,您想要使用视图控制器标题进行测量,如下所示: @interface HomeViewController : UIViewController 我已经更新了这个标题: #import "GAITrackedViewController.h" @interface HomeViewController : GAITrackedViewController 这样做后,我越来越像错误, duplicate symbol _OBJC_CLASS_$_GAIUtil in: /Users/Supriya/Desktop/BTS 2.0/BTS/BTS/Library/libGoogleAnalytics_debug.a(GAIUtil.o) […]

核心数据直接在代码中获取/设置属性时,不会自动调用值转换器

如果我理解正确,核心数据可转换属性背后的想法是: 在+transformedValueClass实现一个带有返回[NSData class]的NSValueTransformer子[NSData class]以及用于转换的实现 在+load或+initialize注册变压器 将实体的属性设置为可转换的 在xcode模型编辑器中为属性设置您的转换器的名称(您用来注册它的名称)。 在这一点上,我期望访问或设置适当的实体types的managedObject属性将触发值转换器。 但是,我正在使用AFIncrementalStore的应用程序中testing这个,我得到以下行为: A – 在+load或+initialize中注册变压器似乎没有必要; 核心数据无论如何发现它(虽然提前阅读)。 B – 通过AFIncrementalStore获取请求AFIncrementalStore会触发变压器。 例如,我从获取请求中获取JSON,并将响应字典映射到managedObject时,转换器被触发,并将合适的字典密钥转换为对象中的NSData 。 C – 但是,如果我尝试通过代码设置或获取属性,则不会调用变换器。 这就是像myManagedObject.myAttribute = @"hello"不会触发从NSString到NSData的转换, NSString *myString = myManagedObject.myAttribute也不会触发从NSData到NSString的转换。 那么我错过了什么? 我认为这个想法是CoreData会自动调用变压器。 我错了吗? 根据这个问题: 为什么我的可变形的核心数据属性不使用我的自定义NSValueTransformer? 这似乎是苹果框架中的一个错误。 但是,抛出我的是通过AFIncrementalStore值变换器调用。 也许关键是通过代码设置一个属性我不是真的触发AFIncrementalStore,所以更改只是在内存中?

iOS – 如何更改文档目录

目前我正在使用的程序使用核心数据,并将“帐户”信息存储在一个名为Accounts.sqlite文件中。该文件存储在Documents目录里面的长string中,即A89C1398-A7BE-44F1-A337-DABA9C66AF1D So我想在/var/mobile/Library/KegCop保存/创build应用程序的文件我发现这个问题 ,我做了必要的修改,删除了我的应用程序,点击Xcode中的Runbutton,运行良好。 但是Accounts.sqlite文件仍然在Documents目录中。 我添加/修改了下面的代码到AppDelegate.m文件, // default sqlite file path // NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Accounts.sqlite"]; // jailbroken path – /var/mobile/Library/KegCop/ NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *docPath = [documentPaths objectAtIndex:0]; NSURL *storeURL = [NSURL fileURLWithPath: [docPath stringByAppendingPathComponent:@"Accounts.sqlite"]]; 然后在AppDelegate.m文件中创build下面的方法, // set path for documents in jailbreak environment +(NSString *)documentsDirectoryPath { #ifdef JAILBREAK NSString […]

EXC_BAD_ACCESS和NSFetchedResultsController

试图追踪这个错误,当我有NSZombieEnabled 。 当获取的结果控制器尝试执行提取时,我得到一个EXC_BAD_ACCESS。 debugging器说: -[CFNumber retain]: message sent to deallocated instance 0x6e88d10 Backtrace说: #0 0x014bbe1e in ___forwarding___ () #1 0x014bbce2 in __forwarding_prep_0___ () #2 0x0145c490 in CFRetain () #3 0x0147929a in CFNumberCreate () #4 0x00b221ed in -[NSPlaceholderNumber initWithShort:] () #5 0x00b2216a in +[NSNumber numberWithShort:] () #6 0x010a549e in snapshot_get_value_as_object () #7 0x010a2a41 in _sharedIMPL_pvfk_core () […]

从CoreData中删除条目后如何处理包含CoreData Entry的NSMutableArray,显示为“<fault>”

PersonsArray:NSMutableArray = ( "<null>", "<null>", "<null>", "<MyProject.Person: 0x7ffc5257d850> (entity: Person; id: 0xd000000000040000 <x-coredata://8DD0B78C-C624-4808-9231-1CB419EF8B50/Person/p1> ; data: {\n image = nil;\n name = dustin;\n})", "<null>", "<null>", "<null>", "<null>", "<null>") 如果用户删除了CoreData Entry(entity:Person; name = dustin) PersonsArray:NSMutableArray = ( "<null>", "<null>", "<null>", "<MyProject.Person: 0x7ffc5257d850> (entity: Person; id: 0xd000000000040000 <x-coredata://8DD0B78C-C624-4808-9231-1CB419EF8B50/Person/p1> ; data: <fault>)", "<null>", "<null>", "<null>", "<null>", "<null>") 如何检查PersonsArray的索引插槽PersonsArray包含此"<fault>"以便将其返回到"<null>" ? […]

在一个TableView中使用2个FRC并configurationFRCDelegate

我发现这个post的问题链接 ,我已经尽我所能将它从Obj-C转换为Swift。 当我添加一个新的实体,并尝试将其保存到CoreData,该应用程序崩溃,并突出显示这一行: modifiedIndexPath = NSIndexPath(row: (indexPath?.row)!, section: 0) 后面的绿色错误如下: Thread 1; EXC_BREAKPOINT (code=1, subcode=0x100008b118) Thread 1; EXC_BREAKPOINT (code=1, subcode=0x100008b118) 。 我不知道这是什么意思,输出面板也只显示(llbd)绿色。 编辑 – 我发现应用程序崩溃,因为indexPath?.row返回零。 我只是不知道为什么它返回零。 我的VC有两个部分是这样设置的: func numberOfSections(in tableView: UITableView) -> Int { return 2 } 标题的标题是这样设置的: // set the titles of the tables func tableView( _ tableView : UITableView, titleForHeaderInSection section: Int)->String? { […]

为什么一个实体需要一个逆向的?

我有一个非常简单的核心数据模型,包含一个包含多个图像的图库。 在我看来,画廊与图像有一对多的关系就足够了,但是如果我也不build立从图像到图库的反向关系,我会得到编译器的警告和错误。 从面向对象的angular度来看,在我看来,一个Image不应该知道或在乎它是否在一个Gallery或任何其他ManagedObject中,那么为什么编译器会迫使我创build这种反向关系呢? 在图像上拥有“画廊”属性似乎是非常错误的。