在实体错误中找不到Keypath,但我可以插入到数据存储中

时间:2012-12-13 15:18:53

标签: ios core-data runtime-error

我收到此错误:

  

核心数据数据存储缺少获取错误:'NSInvalidArgumentException',       原因:未在实体中找到keypath flowData.flowAmount< NSSQLEntity FlowData id = 1>

尝试将核心数据存储中的数据加载到tableview中时。

我在下次运行应用程序后重新创建sqlite数据库,此时我在更改了数据模型并重新版本化后从模拟器中删除了应用程序。

我能够插入数据库。此转储显示我刚刚输入的记录:

INSERT INTO "ZFLOWDATA" 
VALUES(1,1,1,NULL,8.0,376884478.384176,376884471.83175,8.0);

但是当我尝试从数据存储中读取时,我得到了上述错误。

以下是我尝试加载数据时的相关代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSError *error;
     if (![[self fetchedResultsController] performFetch:&error]) {
          NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
          exit(-1);  // Fail
     }
    self.title = @"Flow Data Items";
}

- (NSFetchedResultsController *)fetchedResultsController {



    jhsAppDelegate *appDelegate = (jhsAppDelegate *)[[UIApplication sharedApplication]delegate];

    managedObjectContext = [appDelegate managedObjectContext];



    if (fetchedResultsController != nil) {
        return fetchedResultsController;

    }
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

    NSEntityDescription *entity = [NSEntityDescription
                                   entityForName:@"FlowData" inManagedObjectContext:managedObjectContext];

    [fetchRequest setEntity:entity];

    NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"FlowData.flowAmount"
                                                         ascending:NO];

    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];    
    [fetchRequest setFetchBatchSize:20];
    NSFetchedResultsController *theFetchedResultsController =
    [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
                                        managedObjectContext:managedObjectContext sectionNameKeyPath:nil
                                                   cacheName:@"Root"];

    self.fetchedResultsController = theFetchedResultsController;
    self.fetchedResultsController.delegate = self;
    return fetchedResultsController;
}

这是我的数据模型:

enter image description here

最后,这是我的实体的数据模型类代码:

#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>

@interface FlowData : NSManagedObject

@property (nonatomic, retain) NSNumber * flowAmount;
@property (nonatomic, retain) NSDate * flowEnteredDateTime;
@property (nonatomic, retain) NSDate * flowOccurrenceDateTime;
@property (nonatomic, retain) NSNumber * flowScheduledFrequencyMinutes;
@property (nonatomic, retain) NSNumber * flowUrgency;

@end

因为我能够在另一个viewcontroller上插入一行,所以我必须知道我是如何读取数据的,因为我相信实体在插入实体时确实存在FlowData.flowAmount

有什么想法吗? .h文件中列出属性的顺序是否必须与实际数据模型中的顺序相匹配?我的数据类型是否匹配?

1 个答案:

答案 0 :(得分:2)

sortDescriptor的关键应该只是flowAmount 无需也预先添加实体名称。

PS:类中属性的顺序无关紧要。您的数据类型匹配(floatNSNumber)。