Сбой привязки Core Plot к Core Data с использованием NSArrayController

Я пытаюсь отобразить данные в основных данных, используя основной график и привязки. Моя модель основных данных:

введите здесь описание изображения

Я могу вставить, поэтому я знаю, что у меня хороший контакт... но это бомбит привязку с:

[<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]);



}

person JeremyLaurenson    schedule 24.10.2013    source источник
comment
должна ли ваша привязка быть к newController.arrangedObjects ?   -  person Duncan Groenewald    schedule 04.03.2014


Ответы (1)


Привязка Core Plot ожидает массивы данных. Это код привязки из примера приложения CPTTestApp:

[boundLinePlot bind:CPTScatterPlotBindingXValues
           toObject:self 
        withKeyPath:@"arrangedObjects.x"
            options:nil];
[boundLinePlot bind:CPTScatterPlotBindingYValues
           toObject:self
        withKeyPath:@"arrangedObjects.y"
            options:nil];
person Eric Skroch    schedule 24.10.2013
comment
Итак, вы говорите, что это не работает с CoreData? Мне пришлось бы извлекать информацию об основных данных в NSArrays? - person JeremyLaurenson; 25.10.2013
comment
Я полагаю, что более важно, есть ли какие-либо примеры Core Plot, использующие источник основных данных для построения графиков в любом месте? - person JeremyLaurenson; 25.10.2013
comment
@JeremyLaurenson: вместо этого вы также можете реализовать методы источника данных и запросить там значения в хранилище основных данных. Не то же самое, что привязки, но тоже работает. Ах да, вы могли бы, конечно, реализовать небольшой объект NSController, который делает это, но является привязываемым. - person Mike Lischke; 25.10.2013