2010-02-05 83 views
0

我正在使用核心繪圖在我的一個視圖控制器中創建一個小圖。我一直在試圖追查這個錯誤。我安裝在模擬器上,它工作正常,但只要我把它放在我的設備我得到以下錯誤的:核心繪圖導致設備崩潰但不是模擬器

2010-02-04 22:15:37.394 Achieve[127:207] *** -[NSCFString drawAtPoint:withTextStyle:inContext:]: unrecognized selector sent to instance 0x108530 
2010-02-04 22:15:37.411 Achieve[127:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSCFString drawAtPoint:withTextStyle:inContext:]: unrecognized selector sent to instance 0x108530' 
2010-02-04 22:15:37.427 Achieve[127:207] Stack: (
    843263261, 
    825818644, 
    843267069, 
    842763033, 
    842725440, 
    253481, 
    208187, 
    823956912, 
    823956516, 
    823956336, 
    823953488, 
    823952500, 
    823985628, 
    842717233, 
    843010887, 
    843009055, 
    860901832, 
    843738160, 
    843731504, 
    8797, 
    8692 
) 
terminate called after throwing an instance of 'NSException' 
Program received signal: 「SIGABRT」. 

調試器輸出(的要求):

#0 0x33b3db2c in __kill 
#1 0x33b3db20 in kill 
#2 0x33b3db14 in raise 
#3 0x33b54e3a in abort 
#4 0x33c5c398 in __gnu_cxx::__verbose_terminate_handler 
#5 0x313918a0 in _objc_terminate 
#6 0x33c59a8c in __cxxabiv1::__terminate 
#7 0x33c59b04 in std::terminate 
#8 0x33c59c2c in __cxa_throw 
#9 0x3138fe5c in objc_exception_throw 
#10 0x32433bfc in -[NSObject doesNotRecognizeSelector:] 
#11 0x323b8b18 in ___forwarding___ 
#12 0x323af840 in __forwarding_prep_0___ 
#13 0x0003de28 in -[CPTextLayer renderAsVectorInContext:] at 
CPTextLayer.m:117 
#14 0x00032d3a in -[CPLayer drawInContext:] at CPLayer.m:146 
#15 0x311c95b0 in -[CALayer _display] 
#16 0x311c9424 in -[CALayer display] 
#17 0x311c9370 in CALayerDisplayIfNeeded 
#18 0x311c8850 in CA::Context::commit_transaction 
#19 0x311c8474 in CA::Transaction::commit 
#20 0x311d05dc in CA::Transaction::observer_callback 
#21 0x323ad830 in __CFRunLoopDoObservers 
#22 0x323f5346 in CFRunLoopRunSpecific 
#23 0x323f4c1e in CFRunLoopRunInMode 
#24 0x335051c8 in GSEventRunModal 
#25 0x324a6c30 in -[UIApplication _run] 
#26 0x324a5230 in UIApplicationMain 
#27 0x0000225c in main at main.m:14 

這裏是我的viewDidLoad方法:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.view.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"bg.png"]]; 
    [self loadData]; 

    self.graph = [[CPXYGraph alloc] initWithFrame: self.plotView.frame]; 

    CPLayerHostingView *hostingView = self.plotView; 
    hostingView.hostedLayer = graph; 
    graph.paddingLeft = 50; 
    graph.paddingTop = 10; 
    graph.paddingRight = 10; 
    graph.paddingBottom = 10; 

    percentFormatter = [[NSNumberFormatter alloc] init]; 
    [percentFormatter setPercentSymbol:@"%"]; 
    [percentFormatter setNumberStyle:NSNumberFormatterPercentStyle]; 
    [percentFormatter setLocale: [NSLocale currentLocale]]; 
    [percentFormatter setMultiplier:[NSNumber numberWithInt:1]]; 
    [percentFormatter setMaximumFractionDigits:0]; 

    CPXYPlotSpace *plotSpace = (CPXYPlotSpace *)graph.defaultPlotSpace; 

    plotSpace.xRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(0) 
                length:CPDecimalFromFloat(maxX)]; 
    plotSpace.yRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(minY) 
                length:CPDecimalFromFloat(maxY-minY)]; 

    CPLineStyle *lineStyle = [[CPLineStyle lineStyle]retain]; 
    lineStyle.lineColor = [CPColor grayColor]; 
    lineStyle.lineWidth = 1.0f; 

    CPTextStyle *whiteText = [CPTextStyle textStyle]; 
    whiteText.color = [CPColor whiteColor];  

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

    // axisSet.xAxis.majorIntervalLength = [[NSDecimalNumber decimalNumberWithString:@"0"]decimalValue]; 
    axisSet.xAxis.minorTicksPerInterval = 0; 
    axisSet.xAxis.majorTickLineStyle = nil; 
    axisSet.xAxis.minorTickLineStyle = nil; 
    axisSet.xAxis.axisLineStyle = lineStyle; 
    axisSet.xAxis.minorTickLength = 0; 
    axisSet.xAxis.majorTickLength = 0; 
    axisSet.xAxis.labelFormatter = nil; 
    axisSet.xAxis.labelTextStyle = nil; 

    axisSet.yAxis.majorIntervalLength = [[NSDecimalNumber decimalNumberWithString:intY]decimalValue]; 
    axisSet.yAxis.minorTicksPerInterval = 5; 
    axisSet.yAxis.majorTickLineStyle = lineStyle; 
    axisSet.yAxis.minorTickLineStyle = lineStyle; 
    axisSet.yAxis.axisLineStyle = lineStyle; 
    axisSet.yAxis.minorTickLength = 2.0f; 
    axisSet.yAxis.majorTickLength = 4.0f; 
    axisSet.yAxis.labelFormatter = percentFormatter; 
    axisSet.yAxis.labelTextStyle = whiteText; 

    CPScatterPlot *xSquaredPlot = [[[CPScatterPlot alloc]initWithFrame:graph.defaultPlotSpace.graph.bounds] autorelease]; 
    xSquaredPlot.identifier = @"Plot"; 
    xSquaredPlot.dataLineStyle.lineWidth = 4.0f; 
    xSquaredPlot.dataLineStyle.lineColor = [CPColor yellowColor]; 
    xSquaredPlot.dataSource = self; 
    [graph addPlot:xSquaredPlot]; 

} 

任何幫助,將不勝感激!

+0

從調試器窗口而不是控制檯發佈堆棧跟蹤。 – arul 2010-02-05 02:15:04

+0

@arul:完成(我認爲)。感謝您的建議。 – Eric 2010-02-05 03:20:25

回答

1

添加到您的項目從CorePlot源代碼樹的framework/ iPhoneOnly目錄。

+0

我嘗試過,並得到了一堆構建錯誤。然後我嘗試添加相關的頭文件,但那也沒有解決問題。 – Eric 2010-02-06 03:15:10

+0

原來我需要 CPTextStylePlatformSpecific.m 文件和一切工作。 – Eric 2010-02-06 03:29:14

3

-drawAtPoint:withTextStyle:inContext:是在CPTextStyle.h中添加到NSString的類別方法。

爲了使類別方法與iPhone上的Core Plot等靜態庫一起使用,您需要將-ObjC添加到項目構建設置中的其他鏈接器標誌。在iPhone OS 3.0下,您可能還需要將-all_load添加到您的其他鏈接器標記中,以防止您看到的那些異常。

這記錄在instructions for using Core Plot within applications中。

+0

我添加了額外的鏈接器標誌,但它仍然無法工作。它看起來很有希望,因爲這個問題肯定與沒有加載的類別有關。 感謝分享鏈接,我仔細檢查並確保我已經完成了所有這些工作。 – Eric 2010-02-06 03:14:27

+0

我最近升級到OS3.1.3和相關的XCode版本,我不知道這可能是一個問題? – Eric 2010-02-06 03:17:56

1

我通過在目標>設置中添加-all_load -ObjC標誌來正常工作。我認爲這是每個人都感到困惑的地方。

相關問題