Tag: 核心数据

CoreData:警告:无法为实体“Readings”加载名为“WEEReadings”的类。 找不到类,使用默认的NSManagedObject来代替

好的,现在是社区帮忙几个小时和几个小时的search。 我有一个静态库,使用这个真棒脚本,我生成我的静态框架,其中包括通用静态库,也创build一个包括ReadingsCoreDataModel.momd,其中包括ReadingsCoreDataModel.mom束。 所有好的,我提供这些到我的客户端iOS应用程序,所有构build正确,并启动应用程序扭曲到我的框架和使用捆绑,我有一个单独的WEEDataStore类在我的静态库使用另一个类名为工人,检查,NSManagedObjectModel无,看起来要正确加载,NSPersistentStoreCoordinator不是零,NSManagedObjectContext不是零。 在WEEDataStore中我有一个保存方法,我从我的静态库中的Worker类调用。 在我的ReadingsCoreDataModel.momd中,我创build了一个名称读取和类WEEReadings的实体。 我在Worker类中执行以下操作 WEEReadings* readingsEntity = [NSEntityDescription insertNewObjectForEntityForName:@"Readings" inManagedObjectContext:[[WEEDataStore sharedInstance] managedContext]]; [readingsEntity appendWithReadingsModel:self.readingsModel]; [[WEEDataStore sharedInstance] save]; 结果是得到以下错误 CoreData: warning: Unable to load class named 'WEEReadings' for entity 'Readings'. Class not found, using default NSManagedObject instead. 2014-12-13 20:11:30.080 TestClient[6854:2487108] -[NSManagedObject appendWithReadingsModel:]: unrecognized selector sent to instance 0x1700ccda0 2014-12-13 20:11:30.084 TestClient[6854:2487108] *** Terminating app […]

奇怪的NSManagedObject行为

我遇到了奇怪的CoreData问题。 首先,在我的项目中,我使用了很多的框架,所以有很多问题的根源 – 所以我认为要创build一个最小的项目,重复我的问题。 您可以在Github上克隆testing项目,并逐步重复我的testing。 所以,问题是: NSManagedObject绑定到NSManagedObjectID,它不会让对象从NSManagedObjectContext正确删除 所以,重现步骤: 在我的AppDelegate中,我像往常一样设置CoreData堆栈。 AppDelegate具有managedObjectContext属性,可以访问它来获取主线程的NSManagedObjectContext。 应用程序的对象图由一个实体Message与body , from , timestamp属性组成。 应用程序只有一个只有viewDidLoad方法的viewController。 它看起来如此: – (void)viewDidLoad { [super viewDidLoad]; NSManagedObjectContext *context = ((AppDelegate*)[[UIApplication sharedApplication] delegate]).managedObjectContext; NSEntityDescription *messageEntity = [NSEntityDescription entityForName:NSStringFromClass([Message class]) inManagedObjectContext:context]; // Here we create message object and fill it Message *message = [[Message alloc] initWithEntity:messageEntity insertIntoManagedObjectContext:context]; message.body = @"Hello world!"; […]

在NSFetchedResultsController的空表上定制单元格

我试图放置一个自定义的空单元格,当我的UITableView是空的。 我使用下面的代码: – (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { int count = [self.fetchedResultsController fetchedObjects].count; if (count == 0) { return 1; } return count; } – (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell * cell = nil; int count = [self.fetchedResultsController fetchedObjects].count; if (count == 0) { // return empty cell cell = [self getEmptyCellOfTableView:tableView cellForRowAtIndexPath:indexPath]; } […]

用新的数据Swift更新UITableView

我正在尝试用另一个JSON调用的数据重新填充我的UITableView 。 然而,我目前的设置似乎并没有工作,虽然有许多相同的问题,所以我可以find我已经尝试的答案。 我将我的API数据保存在CoreData实体对象中。 我用我的CoreData实体填充我的UITableView。 在我目前的设置中,我有3个不同的API调用,有不同数量的数据,当然还有不同的值。 我需要能够在这三个数据集之间切换,这就是我现在要完成的。 (到目前为止没有进展)。 我有一个名为“loadSuggestions”的函数,这是我的错误所在。 首先我检查互联网连接。 我设置了managedObjectContext 我检查了我需要调用的API(这是在函数被调用之前确定的,我检查了它是否按预期工作) 我从它试图调用的实体中删除所有当前数据。 (我也尝试从UITableView加载的最后一个数据中删除数据,这并没有改变任何东西)。 我也检查了这个工作。 删除数据后,我检查它打印出一个空数组,我也尝试logging它删除的对象,以确保。 然后我获取新的数据,保存到临时variables。 然后将其保存到我的核心数据。 然后,我做我的第二个API调用(取决于从第一个variables),获取该数据并以相同的方式保存。 我将该对象追加到UITableView填充它的单元格的数组中。 (我检查它打印出来也是如此) 最后我重新加载tableView。 (不改变事物) 这个function: func loadSuggestions() { println("—– Loading Data —–") // Check for an internet connection. if Reachability.isConnectedToNetwork() == false { println("ERROR: -> No Internet Connection <-") } else { // Set the managedContext […]

Swift NSSet&CoreData

我试图将一个客观的C&CoreData应用程序移动到Swift和iOS,并通过遍历NSSet对象来打砖墙: Xcode已经生成了这些类: class Response: NSManagedObject { @NSManaged var responseText: String @NSManaged var score: NSNumber @NSManaged var answers: NSSet @NSManaged var question: Question } class Question: NSManagedObject { @NSManaged var questionText: String @NSManaged var questionType: String @NSManaged var qualifier: Qualifier @NSManaged var responses: NSSet } 然后在第三类我添加一个方法,需要迭代通过NSSet .. class Answer: NSManagedObject { @NSManaged var evaluation: Evaluation @NSManaged […]

NSFetchedResultsController加上NSBatchUpdateRequest等于NSMergeConflict。 我做错了什么?

我有一个使用NSManagedObjectContext设置的NSManagedObjectContext 。 我使用此上下文执行提取。 我也有一个使用相同的NSManagedObjectContext设置的NSBatchUpdateRequest 。 我使用相同的NSManagedObjectContext执行请求。 当我用NSBatchUpdateRequest执行请求时,我可以看到我所有的数据都已经更新了。 如果我重新启动应用程序,使用NSFetchedResultsController任何获取也正常工作。 这个问题是当我不重新启动应用程序,我做了一个又一个的操作,我得到了一个NSMergeConflict (0x17427a900) for NSManagedObject (0x1740d8d40) with objectID '0xd000000001b40000…错误,当我从我的上下文调用方法save 。 我知道问题来自同一个数据的并发更改,但我不知道解决scheme是什么? 一个可能是通过NSMergePolicy类,但我怀疑这是一个干净的方式来解决我的问题。 我该怎么办? 有两个不同的上下文? (怎么样?)

为核心数据规范化或规范化string?

我已经观看了Core Data上的一些WWDCvideo,并计划维护一个规范化的文本属性。 假设我有以下数据: originalString normalizedString (+lowercase?) Ønsker onsker onsker onsker Onsker onsker 当我查询我的模型时,我想通过'normalizedString'对它进行sorting,以便忽略大小写和Ø(或其他字符)。 我也希望能够运行一个查询,如“以o开头”,并返回上面的3个字。 我试图避免做一些事情: [NSPredicate predicateWithFormat:@"(originalString like[cd] %@)"… 查询模型。 我也试图使用'originalString'进行sorting。 我已经尝试了两种不同的方法没有成功,我规范化的string仍然保存为originalString(我重写setter我创build的类别): 调用decomposedStringWithCanonicalMapping: // … [normalizedString decomposedStringWithCanonicalMapping]; // … 遵循这个例子 : // … CFStringNormalize((CFMutableStringRef)normalizedString, kCFStringNormalizationFormD); CFStringFold((CFMutableStringRef)normalizedString, kCFCompareCaseInsensitive | kCFCompareDiacriticInsensitive | kCFCompareWidthInsensitive, NULL); 任何想法,我怎样才能完成我的目标? 编辑:这是我重写的二传手,我知道它被称为: – (void) setNormalizedName:(NSString *)newNormalizedName { NSMutableString *normalizedString; if (![self.lastName length] == […]

CoreData以另一个关系(m2n)获取关系和组的计数请求

在我的CoreData模型中,我有一个使用中间实体build模的n2n关系: Person [1<–] Person2Appointment [–>1] Appointment Person2Appointment实体如下所示: @interface Person2Appointment : NSManagedObject // attributes @property (nonatomic, retain) NSNumber * participationState; // relations @property (nonatomic, retain) Person * person; @property (nonatomic, retain) Appointment * appointment; … @end (这两个关系也被build模为Person和Appointment实体的反向关系) 我想把所有人的过去任命计算在内。 在SQL中,它看起来像: select count(fk_appointment), fk_person from person2appointment t0 left join appointment t1 on t0.fk_appointment = t1.pk where t1.date < […]

为什么Xcode 9 beta不显示CoreData实体和属性的索引选项?

在Xcode 9(beta 6)中,数据模型检查器( .xcdatamodeld文件)中缺less索引选项: 它们在Xcode 8中可见: 你知道这个决定背后有什么理由吗?

核心数据线程和locking争用问题

我目前正在编写iOS应用程序的同步引擎。 我正在编写的一种方法是重新加载数据function,在该function中,应用程序会重新下载用户的数据以及所有照片。 这是一个昂贵的操作(时间上),所以我创build了一个NSOperation子类SSReloadDataOperation 。 它下载数据,获取当前用户实体,从当前用户中删除所有现有的照片,并重新填充。 然而,尽pipe我认为这是线程安全的,但是有时在操作正在运行并且-currentUser从其他地方访问时,应用程序崩溃,大概是在尝试获取它时。 其他时候,UI有时会冻结,并在debugging器中暂停显示它总是停在-currentUser NSFetchRequest执行调用。 我如何使这个操作线程安全和primefaces性,使我可以下载和重新填充,而不阻塞主UI线程,仍然有-currentUser可访问? 在使用锁或体系结构方面有什么缺失的吗? 谢谢! 码: – (void)main { // Download the photo data [[SyncEngine defaultEngine] getUserPhotosWithCompletionBlock:^(NSMutableArray *photos) { if (photos) { // Create a new NSManagedObjectContext for this operation SSAppDelegate* appDelegate = [[UIApplication sharedApplication] delegate]; NSManagedObjectContext* localContext = [[NSManagedObjectContext alloc] init]; [localContext setPersistentStoreCoordinator:[[appDelegate managedObjectContext] persistentStoreCoordinator]]; NSNotificationCenter* notificationCenter = […]