2010-06-10 5 views
1

Je suis suivant le tutoriel ici de terrain de base ici .... http://www.switchonthecode.com/tutorials/using-core-plot-in-an-iphone-applicationProblèmes rencontrés lors de base Tuorial Terrain

Je reçois des erreurs avec les lignes suivantes de code

//SAYING INCOMPATIBLE TYPE FOR AURGUMENT 1 'setMajorIntervalLength' 
axisSet.xAxis.majorIntervalLength = [NSDecimalNumber decimalNumberWithString:@"5"]; 

// request for member 'axisLabelOffset' in something not a structure or union 
axisSet.xAxis.axisLabelOffset = 3.0f; 

//request for member 'bounds' in something not a structure or union 
CPScatterPlot *xSquaredPlot = [[[CPScatterPlot alloc] initWithFrame:graph.defaultPlotSpace.bounds] autorelease]; 

Voici mon code maintenant Je ne reçois pas des erreurs du compilateur plus mais son plantage et non le chargement de la vue s'il vous plaît jeter un coup d'oeil si vous pouvez

@implementation FirstCorePlotViewController 

(void)viewDidLoad 
{ 

     [super viewDidLoad]; 

     graph = [[CPXYGraph alloc] initWithFrame: self.view.bounds]; 

     CPLayerHostingView *hostingView = (CPLayerHostingView *)self.view; 
     hostingView.hostedLayer = graph; 
     graph.paddingLeft = 20.0; 
     graph.paddingTop = 20.0; 
     graph.paddingRight = 20.0; 
     graph.paddingBottom = 20.0; 

     CPXYPlotSpace *plotSpace = (CPXYPlotSpace *)graph.defaultPlotSpace; 
    plotSpace.xRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(-6) 
               length:CPDecimalFromFloat(12)]; 
    plotSpace.yRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(-5) 
               length:CPDecimalFromFloat(30)]; 

     CPXYAxisSet *axisSet = (CPXYAxisSet *)graph.axisSet; 

      CPLineStyle *lineStyle = [CPLineStyle lineStyle]; 
     lineStyle.lineColor = [CPColor blackColor]; 
      lineStyle.lineWidth = 2.0f; 

     axisSet.xAxis.majorIntervalLength =CPDecimalFromString(@"5"); 
     axisSet.xAxis.minorTicksPerInterval = 4; 
     axisSet.xAxis.majorTickLineStyle = lineStyle; 
     axisSet.xAxis.minorTickLineStyle = lineStyle; 
     axisSet.xAxis.axisLineStyle = lineStyle; 
     axisSet.xAxis.minorTickLength = 5.0f; 
     axisSet.xAxis.majorTickLength = 7.0f; 
     axisSet.xAxis.labelOffset = 3.0f; 

     axisSet.yAxis.majorIntervalLength = CPDecimalFromString(@"5"); 
     axisSet.yAxis.minorTicksPerInterval = 4; 
     axisSet.yAxis.majorTickLineStyle = lineStyle; 
     axisSet.yAxis.minorTickLineStyle = lineStyle; 
     axisSet.yAxis.axisLineStyle = lineStyle; 
     axisSet.yAxis.minorTickLength = 5.0f; 
     axisSet.yAxis.majorTickLength = 7.0f; 
     axisSet.yAxis.labelOffset = 3.0f; 

    CPScatterPlot *xSquaredPlot = [[(CPScatterPlot *)[CPScatterPlot alloc] initWithFrame:graph.bounds] autorelease]; 


     xSquaredPlot.identifier = @"X Squared Plot"; 
    xSquaredPlot.dataLineStyle.lineWidth = 1.0f; 
    xSquaredPlot.dataLineStyle.lineColor = [CPColor redColor]; 
    xSquaredPlot.dataSource = self; 
    [graph addPlot:xSquaredPlot]; 

    CPPlotSymbol *greenCirclePlotSymbol = [CPPlotSymbol ellipsePlotSymbol]; 
     greenCirclePlotSymbol.fill = [CPFill fillWithColor:[CPColor greenColor]]; 
    greenCirclePlotSymbol.size = CGSizeMake(2.0, 2.0); 
    //xSquaredPlot.defaultPlotSymbol = greenCirclePlotSymbol; 

    CPScatterPlot *xInversePlot = [[(CPScatterPlot *)[CPScatterPlot alloc] initWithFrame:graph.bounds] autorelease];  
    xInversePlot.identifier = @"X Inverse Plot"; 
    xInversePlot.dataLineStyle.lineWidth = 1.0f; 
    xInversePlot.dataLineStyle.lineColor = [CPColor blueColor]; 
    xInversePlot.dataSource = self; 
    [graph addPlot:xInversePlot]; 
} 

-(NSUInteger)numberOfRecords 
{ 

     return 51; 
} 

-(NSNumber *)numberForPlot:(CPPlot *)plot field:(NSUInteger)fieldEnum 
      recordIndex:(NSUInteger)index 
{ 
     double val = (index/5.0)-5; 
    if(fieldEnum == CPScatterPlotFieldX) 
    { 

      return [NSNumber numberWithDouble:val]; 
    } 
    else 
    { 
     if(plot.identifier == @"X Squared Plot") 
     { 
        return [NSNumber numberWithDouble:val*val]; 
     } 
     else 
     { 
        return [NSNumber numberWithDouble:1/val]; 
     } 
} 
} 

@end 

Répondre

0

// request for member 'axisLabelOffset' in something not a structure or union

... signifie que le compilateur ne reconnaît pas le nom fourni dans la syntaxe de point comme appartenant à l'objet. Les typos sont une cause fréquente de cette erreur. Un autre n'important pas correctement l'en-tête de la classe précédant le point.

//SAYING INCOMPATIBLE TYPE FOR AURGUMENT 1 'setMajorIntervalLength' 

Cela signifie que la propriété majorIntervalLength ne prend pas un NSDecimalNumber.

Je vais dire que tous vos problèmes sont causés par des problèmes avec les instructions #import. Vous n'important pas les en-têtes là où vous devriez être et le compilateur ne comprend pas quel symbole va avec quelle classe.

+0

J'ai importé ceci: dans le fichier .m # import "FirstCorePlotViewController.h" qui est la valeur par défaut. Je sais que le tracé de base est correctement chargé car si je supprime toutes les exceptions, le simulateur me montre un graphique vide. C'est ce que j'ai importé dans mon fichier .h #import #import Dois-je importer plus dans le fichier .m? –

+0

Je n'ai pas besoin d'ajouter le code protocal quelque part, n'est-ce pas? –

+0

Voir Eric Skroch réponse, il semble être familier avec le cadre. – TechZen

1

Aucune de ces erreurs n'est due à des problèmes de # import. Ce tutoriel est connu pour être quelque peu obsolète et certaines parties du framework Core Plot ont changé.

  • La propriété majorIntervalLength attend un NSDecimal, pas NSDecimalNumer. Core Plot inclut plusieurs fonctions utilitaires qui convertissent d'autres types en NSDecimal tels que CPDecimalFromString et CPDecimalFromDouble.

axisSet.xAxis.majorIntervalLength = CPDecimalFromString(@"5");

  • La propriété axisLabelOffset a été renommé labelOffset.

  • La troisième erreur est provoquée par deux choses. UIView et CPLayer (la classe racine pour toutes les couches de tracés principales) ayant une méthode -initWithFrame: Parce que -alloc renvoie un id, le compilateur ne sait pas lequel -initWithFrame: utiliser et parfois deviner faux. Vous pouvez le réparer avec un transtypage. De plus, les espaces de tracé ne sont pas des calques; il suffit d'obtenir les limites du graphique.

 
CPScatterPlot *xSquaredPlot = [[(CPScatterPlot *)[CPScatterPlot alloc] initWithFrame:graph.bounds] autorelease]; 
+0

1. Pouvez-vous me donner un extrait de code pour le convertir correctement ... axisSet.xAxis.majorIntervalLength = [NSDecimalNumber decimalNumberWithString: @ "5"]; 2. EST FIXÉ 3. Votre code produit toujours la même erreur. Je veux juste obtenir un échantillon à courir pour que je puisse voir le scénario de base en action et c'est le seul tutoriel que je peux trouver. Je suis sûr que j'ai correctement installé core-plot et le CPLayerHostingView fonctionne parce que si je retire tout le code graphique je vois l'axe xy dans le simulateur iphone –

+0

J'ai édité ma réponse pour donner un exemple pour # 1 et corriger # 3 . Les espaces de tracé ne sont pas des CPLayers, donc ils n'ont pas de limites. Vous avez probablement toujours besoin du typecast. –

+0

Eric merci pour votre aide sur Je suis vraiment intéressé à obtenir ce travail et je suis tout simplement nouveau pour le développement de l'iphone et sucer dès maintenant. Je vois que vous contribuez à core-intrigue sur leur site et j'ai essayé de vous envoyer un courriel. Quoi qu'il en soit, j'ai ajouté mon fichier .m à cette publication, je ne reçois plus d'erreurs de compilation, mais l'application est crashingnow et ne se charge pas. Avant de commenter toutes les parcelles et de voir l'axe xy, je sais que j'ai correctement installé l'intrigue dans le projet. Pourriez-vous s'il vous plaît m'aider à faire fonctionner un de ces graphiques xy? Merci pour votre aide –

0

Il y a une division par zéro erreur dans votre méthode -numberForPlot:field:recordIndex:. Lorsque index == 25, l'instruction 1/val va exploser.

+0

J'ai ajouté ceci pour le faire fonctionner ... double val; \t si (val! = 25) \t { \t val = (index/5,0) -5; } mais il ne se charge toujours pas dans le simulateur –

+0

Ce code est hors du tutoriel core-plot –

Questions connexes