【问题标题】:Core Plot binding to Core Data using NSArrayController crashed使用 NSArrayController 绑定到 Core Data 的 Core Plot 崩溃了
【发布时间】:2013-10-25 07:07:46
【问题描述】:

我正在尝试使用核心图和绑定来绘制核心数据中的数据。 我的核心数据模型:

我可以插入,所以我知道我的联系人很好......但是这会在绑定时爆炸:

[<NSArrayController 0x6000001c40b0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key measuredate.

-(void)addPlotWithIdentifier:(NSString *)identifier context:(NSManagedObjectContext *)moc
{

    CPTScatterPlot *newPlot = [[CPTScatterPlot alloc] initWithFrame:graph.bounds];
    dataSourceLinePlot.identifier     = identifier;



    CPTMutableLineStyle *lineStyle = [dataSourceLinePlot.dataLineStyle mutableCopy];
    lineStyle.lineWidth              = 2.0;
    lineStyle.lineColor              = [CPTColor greenColor];
    dataSourceLinePlot.dataLineStyle = lineStyle;


    CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)graph.defaultPlotSpace;
    plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(1380243600)
                                                    length:CPTDecimalFromFloat(1382835600)];
    plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0)
                                                     length:CPTDecimalFromFloat(100)];

    [dataSourceLinePlot setPlotSpace:plotSpace];
    NSLog(@"Create a controller");
    NSArrayController *newController=[[NSArrayController alloc] initWithContent:nil];
    NSLog(@"MOC: set context");
    [newController setManagedObjectContext:moc];
    NSLog(@"MOC: set Entity");
    [newController setEntityName:@"BM_Measure"];
    NSLog(@"MOC: set Editable");
    [newController setEditable:FALSE];
    NSLog(@"MOC: set sort descriptors");
    [newController setSortDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"measuredate" ascending:YES]]];
    NSLog(@"MOC: fetch");

    [newController setAutomaticallyPreparesContent:TRUE];
    [newController setAutomaticallyRearrangesObjects:TRUE];
    NSError *error;
    if ([newController  fetchWithRequest:nil merge:NO error:&error] == NO){
        NSLog(@"Couldnt fetch");
    }
    NSLog(@"%@",newController);

    NSLog(@"Bind x");
    [newPlot bind:CPTScatterPlotBindingXValues toObject:newController withKeyPath:@"measuredate" options:nil];
    NSLog(@"Bind y");
    [newPlot bind:CPTScatterPlotBindingYValues toObject:newController withKeyPath:@"measurevalue" options:nil];
    NSLog(@"Save Objects");

    [g_Plots addObject:newPlot];
    [g_ArrayControllers addObject:newController];
    [graph addPlot:newPlot];
    NSLog(@"Added... %ld",[g_Plots count]);



}

【问题讨论】:

  • 应该绑定到newController.arrangedObjects 吗?

标签: core-data core-plot nsarraycontroller


【解决方案1】:

Core Plot 绑定需要数据数组。这是 CPTTestApp 示例应用中的绑定代码:

[boundLinePlot bind:CPTScatterPlotBindingXValues
           toObject:self 
        withKeyPath:@"arrangedObjects.x"
            options:nil];
[boundLinePlot bind:CPTScatterPlotBindingYValues
           toObject:self
        withKeyPath:@"arrangedObjects.y"
            options:nil];

【讨论】:

  • 所以你是说它不适用于CoreData?我必须将核心数据信息提取到 NSArrays 中?
  • 我想更重要的是,有任何使用 Core Data 源在任何地方绘制图形的 Core Plot 示例吗?
  • @JeremyLaurenson:您也可以改为实现数据源方法并查询您的核心数据存储以获取那里的值。与绑定不同,但也可以。啊,是的,您当然可以实现一个小的 NSController 对象来执行此操作但可绑定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-02
  • 1970-01-01
  • 1970-01-01
  • 2016-10-27
  • 1970-01-01
相关资源
最近更新 更多