Tag: core data

数组索引超出范围 – 可select解除绑定时出错

我有一个叫做Settings的实体,它有一个叫做Inttypes的backgroundColor属性,如果它是1,那么视图控制器将有一个白色的背景,如果是0,那么背景是深灰色。 但是当我试图打开视图控制器时出现以下错误; 致命错误:数组索引超出范围 对于我的函数中的以下行 if settingsArray.count == 1 { setting = settingsArray[1] } else if settingsArray.count <= 0 { println("No settings in array") } 视图控制器 var settingsArray: [Settings]! var setting: Settings! var backgroundSetting: Bool = true override func viewWillAppear(animated: Bool) { backgroundSettings() } override func viewDidLoad() { super.viewDidLoad() backgroundSettings() } // Function to fetch settings […]

用CoreData中保存的坐标将注释固定到mapView

我现在已经在互联网上search了,而且我尝试了几乎所有的东西。 我目前的项目是: 我从用户位置读取当前的坐标,并保存在CoreData中的经度和纬度,这个地方的名字(用户可以给一个名字) // MARK: – AddPlace Button Events @IBAction func onAddButton(sender: AnyObject) { //searching the current location let locCoord = CLLocationCoordinate2DMake(self.locationManager.location!.coordinate.latitude, self.locationManager.location!.coordinate.longitude) // 1. pass the data from the current location to lat and lng let lat = locCoord.latitude let lng = locCoord.longitude let ed = NSEntityDescription.entityForName("Store", inManagedObjectContext: moContext) let store = Store(entity: ed!, […]

CoreData,UIManagedDocument和空的持久存储

我正在使用UIManagedDocument读取和写入CoreData 。 我有Document类。 这是一些教程的文档: 。H #import <Foundation/Foundation.h> #import <CoreData/CoreData.h> typedef void (^OnDocumentReady) (UIManagedDocument *document); @interface Document : NSObject @property (strong, nonatomic) UIManagedDocument *document; + (Document *)sharedDocument; – (void)performWithDocument:(OnDocumentReady)onDocumentReady; @end .M @interface Document () – (void)objectsDidChange:(NSNotification *)notification; – (void)contextDidSave:(NSNotification *)notification; @end; @implementation Document @synthesize document = _document; static Document*_sharedInstance; + (Document *)sharedDocument { static dispatch_once_t once; […]

即使validation失败,核心数据也会保存对象

我已经包含了处理所有保存function的函数。 这是我的问题。 我抓取5个input值并将其保存为CoreData Log Entity。 即使在Log对象无法validation的情况下,当我退出表单并查看表视图时,它仍然正在保存。 如何强制核心数据只保存对象一旦validation? -(void) saveLog { NSManagedObjectContext *managedObjectContext = [(AppDelegate_Shared *)[[UIApplication sharedApplication] delegate] managedObjectContext]; FormPickerCell *bloodPressure = (FormPickerCell *) [self.formController fieldAsObject:@"bloodpressure"]; NSInteger systolic = [(PressureDataSource*)bloodPressure.pickerCellDelegate selectedSystolicPressureForFormPickerCell:bloodPressure]; NSInteger diastolic = [(PressureDataSource*)bloodPressure.pickerCellDelegate selectedDiastolicPressureForFormPickerCell:bloodPressure]; NSLog(@"bp is %d / %d", systolic, diastolic); NSLog(@"date is %@", [self.formController valueForField:@"date"]); NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd […]

在UIManagedDocuments获取新数据后,NSFetchedResultsController不会更新TableView

我正在使用一个NSFetchedResultsController与在后台线程中得到更新的UIManagedDocument组合。 我已经完全按照本教程中的描述设置了NSFetchedResultsController: 如何使用NSFetchedResultsController 我已经把委托_fetchedResultsController.delegate = self和我的视图控制器的协议设置_fetchedResultsController.delegate = self 。 我的代码在启动后加载数据时工作正常。 但是, NSFetchedResultsController 不会更新TableView,只要它已经处理并将数据保存在后台线程中。 特别是,NSFetchedResultsController的委托方法-controllerWillChangeContent:controller等永远不会被调用。 我已经仔细检查SQLite数据库是否包含正确的数据。 这是我如何处理和保存在视图控制器中的数据: [backgroundContext performBlock:^{ [company parseAttributesFrom:xmlStr inManagedObjectContext:backgroundContext]; //self.managedDocument.managedObjectContext NSError *error = nil; [backgroundContext save:&error]; if (error) NSLog(@"error: %@",error.localizedDescription); [self.managedDocument.managedObjectContext performBlock:^{ NSError *error = nil; [self.managedDocument.managedObjectContext save:&error]; if (error) NSLog(@"error: %@",error.localizedDescription); }]; [self.managedDocument saveToURL:self.managedDocument.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:NULL]; [self.managedDocument updateChangeCount:UIDocumentChangeDone]; }]; 当底层数据发生变化时,如何让NSFetchedResultsController自动更新TableView? 感谢您的帮助!

核心数据错误 – NSDate localizedCaseInsensitiveCompare:无法识别的select器发送到实例

我已经search了最近几个小时,但还没有find答案。 我实现了一个AVFoundation相机,我将图像数据保存到磁盘,并只存储在核心数据的path。 一切工作正常,但随机数拍摄的照片后,我得到这个错误: CoreData:错误:严重的应用程序错误。 核心数据更改处理期间发生exception。 这通常是NSManagedObjectContextObjectsDidChangeNotification观察者中的一个错误。 – [__ NSDate localizedCaseInsensitiveCompare:]:无法识别的select器发送到实例 这是我的抓取请求代码: NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Photo"]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"notebook = %@", notebookItem]; [request setPredicate:predicate]; request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"dateTaken" ascending:NO selector:@selector(compare:)]]; 这里是我如何将数据保存在一个单独的类: //I create a photo Object to save to core data and set properties like dateTaken and tittle //Here is where I create […]

为什么Core Data需要这么长时间来保存一个对象?

我在我的实体类中有一个简单的方法,将自定义方法添加到我的子类NSManagedObject类(由于自动生成子类,我不会触及)。 我有这种方法从MOC中删除一个对象,并保存上下文。 + (void)deleteWishlist:(Wishlist *)wishlist inManagedObjectContext:(NSManagedObjectContext *)context { [context deleteObject:wishlist]; NSError *error; if(![context save:&error]) { NSLog(@"%@", error); } else { NSLog(@"Delete successful"); } } 我从我的一个视图控制器调用这个: – (void)deleteWishlist:(Wishlist *)wishlist { if(wishlist) { [Wishlist deleteWishlist:wishlist inManagedObjectContext:self.managedObjectContext]; } } 它从UI事件处理方法(委托tableView: commitEditingStyle: forRowAtIndexPath:方法)被调用。 现在,这一切工作,但它需要很长时间来保存对象…我不知道这是否是默认行为,但我希望它从图中删除后立即保存到永久存储。 我不介意是否必须等到保存。 在iOS模拟器上,如果我点击“停止”,然后再次加载我的应用程序,愿望清单仍然存在。 如果我点击主页button,应用程序进入后台模式,并在那里得到保存…但它似乎是保存两次。 老实说,我不知道第一次做什么。 2013-05-29 00:45:14.819 App[29024:c07] [WishlistCDTVC setFetchedResultsController:] set 2013-05-29 00:45:14.820 App[29024:c07] [WishlistCDTVC performFetch] […]

NSPredicate不能使用计算字段

我有一个核心数据项目,难以用简单的计算字段search数据,不知道为什么它不工作。 我有一个导师实体,核心数据string属性“tutorFirstName”和“tutorLastName”。 我已经创build了一个额外的string属性“tutorFullName”,这是填充在一个类别中,如下所示: NSString *fullName = [@[self.tutorFirstName, self.tutorLastName] componentsJoinedByString:@" "]; 数据填充良好,但是当我执行以下search时,只有tutorFirstName和tutorLastName上的谓词工作: NSPredicate *predicate = [NSPredicate predicateWithFormat:@"tutorFirstName = %@", @"Sean"]; [fetchRequest setPredicate:predicate]; NSArray *fetchedObjects = [moc executeFetchRequest:fetchRequest error:&error]; NSLog(@"Search on %@ returned %lu items (%@)",predicate, (unsigned long)fetchedObjects.count, [fetchedObjects objectAtIndex:0]); predicate = [NSPredicate predicateWithFormat:@"tutorFullName = %@", @"Sean Silverman"]; [fetchRequest setPredicate:predicate]; fetchedObjects = [moc executeFetchRequest:fetchRequest error:&error]; NSLog(@"Search on […]

从iCloud中删除核心数据失败

我试图使用[NSPersistentStoreCoordinator removeUbiquitousContentAndPersistentStoreAtURL:options:error:]从iCloud中删除核心数据。 但是我得到奇怪的输出: __93+[NSPersistentStoreCoordinator removeUbiquitousContentAndPersistentStoreAtURL:options:error:]_block_invoke(1982): CoreData: Ubiquity: Unable to move content directory to new location: file:///private/var/mobile/Library/Mobile%20Documents/<UBIQUITY_ID>/ New: file:///private/var/mobile/Library/Mobile%20Documents/OldUbiquitousContent-mobile~C9439AD0-1E87-4977-9C68-0674F5E2E93B Error Domain=NSCocoaErrorDomain Code=513 "The operation couldn't be completed. (Cocoa error 513.)" UserInfo=0x181ab790 {NSSourceFilePathErrorKey=/private/var/mobile/Library/Mobile Documents/<UBIQUITY_ID>, NSUserStringVariant=( Move ), NSFilePath=/private/var/mobile/Library/Mobile Documents/<UBIQUITY_ID>, NSDestinationFilePath=/private/var/mobile/Library/Mobile Documents/OldUbiquitousContent-mobile~C9439AD0-1E87-4977-9C68-0674F5E2E93B, NSUnderlyingError=0x181aab50 "The operation couldn't be completed. Operation not permitted"} 这是什么意思? 如何避免它? 我正在开发iCloud禁用/启用function。 详情在这里 更新: NSDictionary *iCloudOptions […]

核心数据NSManagedObject – 跟踪属性是否改变

我有一个对象 – Config 。 我想知道Config上的Account属性是否已经改变。 发生这种情况时,我想发送一个NSNotification以便所有关心Account更改的代码都知道。 我最初的想法是在我的NSManagedObject子类,我会重写setAccount方法设置一个瞬态属性AccountDidChange为true 。 然后在didSave如果AccountDidChange为true我会发送通知,然后将其设置为false 。 有没有更好的办法? 我的问题是,从我读过的,通过改变AccountDidChange回到false ,我会弄脏我的对象,需要再次保存。 更多信息: Config对象是应用程序的当前configuration。 Account实际上可以更改为ActiveAccount 。 与Account实体有关系,其中包含所有帐户的列表。 这个想法是,用户可以更改应用程序的活动帐户。 所以我们有一套服务器,用户一次只能login一个。 Config.Account指向该活动帐户,并用于build立到服务器的连接以检索信息。 我正在使用这个通知Config.Account已经改变,告诉其他对象清理他们的信息 – 如警报列表。 基本上,所有的信息都是每个账户,所以它需要被删除,然后在新的活动账户的下一次加载中重新获取。 此外,给定的名称不是我的实际对象名称 – 只是试图让示例更容易遵循。