Прежде чем говорить о Core Plot, давайте очистим код, который вы разместили:
- (void)generateData
{
if (plotData == nil)
{
plotData = [[NSMutableArray alloc] initWithCapacity:100];
// Manually specifying values
// [plotData addObject:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:1000], @"x", [NSNumber numberWithInt:1100], @"y", nil]];
// [plotData addObject:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:2000], @"x", [NSNumber numberWithInt:2200], @"y", nil]];
// [plotData addObject:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:1100], @"x", [NSNumber numberWithInt:3300], @"y", nil]];
// [plotData addObject:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:4000], @"x", [NSNumber numberWithInt:4400], @"y", nil]];
// Looping for values
for (NSUInteger currentValueIndex = 0; currentValueIndex < 4; currentValueIndex++)
{
[plotData addObject:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:1000 * currentValueIndex], @"x", [NSNumber numberWithInt:1000 * currentValueIndex], @"y", nil]];
}
}
}
У вас есть два NSArrays, которые вы пропускаете, даже до того, как проверка на plotData
будет равна нулю.Я удалил их с заменой их функции закомментированным кодом, в котором перечисленные вами значения вручную добавляются в массив plotData
.Эти утечки потенциально могут привести к сбою нехватки памяти, если вы неоднократно вызывали -generateData
.
. Затем я упростил цикл for для заполнения массива plotData
некоторыми значениями.Здесь нет необходимости использовать NSMutableDictionary (даже если пример приложения Core Plot, из которого вы вставили эту строку, использует один).
Чтобы использовать это в Core Plot, вам необходимо убедиться, что методы делегата источника данных необходимывыглядят следующим образом:
-(NSUInteger)numberOfRecordsForPlot:(CPPlot *)plot
{
return [plotData count];
}
-(NSNumber *)numberForPlot:(CPPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index
{
return [[plotData objectAtIndex:index] valueForKey:(fieldEnum == CPScatterPlotFieldX ? @"x" : @"y")];
}
Если ваше приложение все еще дает сбой с этими исправлениями, ваша проблема не в данных, которые вы предоставляете в Core Plot, а в других местах вашего приложения.Как всегда, включите точки останова для исключений, запустите с точками останова и посмотрите, на какой именно линии вылетает ваше приложение.Прочитайте следы стека.