코어 플롯 라이브러리를 사용하고 있고 데이터를 다시로드하는 것과 관련하여 주요 문제가 있습니다.reloadData를 호출 할 때 코어 플롯이 충돌합니다.
2 개의 정적 그래프 만 표시하고 정상적으로 작동하는보기가 있습니다. 그러나 테이블을 업데이트해야하는 또 다른보기가 있습니다.
클래스가 커짐에 따라 제공해야하는 정보의 양은 분명하지 않습니다. 따라서 작게 시작하여 필요한 경우 더 추가 할 것입니다.
작동 방식은 자리 표시 자 NSNull 값이 포함 된 NSArray입니다.
- (NSMutableArray *)organisationsToDisplay
{
if (_organisationsToDisplay == nil) {
NSNull *placeHolder = [NSNull null];
_organisationsToDisplay = [NSMutableArray arrayWithObjects:placeHolder, placeHolder, placeHolder, placeHolder, placeHolder, nil];
}
return _organisationsToDisplay;
}
나는 항상 2 개의 객체를 보유하고 3 개의 비교기를 추가하는 데이 기능을 사용하고 있습니다. 항상 두 개의 객체가 바로 추가됩니다. 나머지 3 개는 [NSNull 값]으로 유지됩니다. 배열의 특정 객체가 NSNull인지 확인한 다음 선택된 객체로 대체합니다. 내가 전화하기 전에 아래의 코드는 reloadData 필요한 사항을 변경하기 위해 호출된다 :이 사람이 제 1 비교기, 다음 두 번째 비교기를 선택하고 제 1 비교기의 선택을 취소하면 내 그래프의 간격을 가질 수 있습니다
- (void)updateGraphWithNewComparator:(NSIndexPath *)indexPath
{
for (int i = 0; i < [self.organisationsToDisplay count]; i++) {
if (self.organisationsToDisplay[i] == [NSNull null]) {
self.organisationsToDisplay[i] = self.comparatorList[indexPath.row];
[self.organisationKeyViews[i] setHidden:NO];
[self.organisationKeyViews[i] titleLabel].text = [self.comparatorList[indexPath.row] name];
break;
}
}
[self updateGraph:Unknown];
}
.
이것은 5.1.1의 시뮬레이터에서 작동했지만 장치에서는 작동하지 않습니다. 비교기를 클릭하자마자 충돌합니다. 이제 xcode 6으로 업그레이드하여 시뮬레이터에서 동일한 작업을 수행하고 있습니다.
또한 Xcode를 6으로 업그레이드 한 이후 얻을 다음과 같은 오류 : 어설 션 실패 : (CGFloatIsValid (x)의 & & CGFloatIsValid (Y)), 기능 무효 CGPathMoveToPoint (CGMutablePathRef, CONST CGAffineTransform *, CGFloat, CGFloat), 파일 경로 이 충돌 할 때 /CGPath.cc, 라인 254
여기 실 것입니다 : 내가 어떤 도움을 정말 감사하겠습니다
. 더 이상 정보가 필요하면 언제든지 물어보십시오.
편집 여기에이 두 방법 중 내 기본 클래스 구현입니다. 그런 다음 각 클래스에서이를 재정의하여 데이터를 제공합니다. 이 기본 버전으로 앱이 다운됩니다.
사용하려는 개체가 조직처럼 형식인지 확인합니다. 그렇지 않으면 NSNull 개체라는 것에 대해 불만을 제기합니다. 두 번째 자리 표시자는 배열을 많이 가지고 있으므로 비교 그래프를 작성해야합니다. 당신은 알려 주시기 바랍니다 더 이상 정보가 필요하면
#pragma mark Populating and updating arrays
// Method needs to be overwritten to produce different data.
- (NSArray *)populateDataArray:(Organisation *)organisation option:(DataOptions)selectedOption
{
if (selectedOption == PlaceholderOne) {
if ([organisation isKindOfClass:[Organisation class]]) {
return @[[NSNumber numberWithInt:50],
[NSNumber numberWithInt:50],
[NSNumber numberWithInt:50],
[NSNumber numberWithInt:50],
];
}
}
else if (selectedOption == PlaceHolderTwo) {
if ([organisation isKindOfClass:[Organisation class]]) {
return @[@[[NSNumber numberWithInt:10],
[NSNumber numberWithInt:20],
[NSNumber numberWithInt:30],
[NSNumber numberWithInt:40],
[NSNumber numberWithInt:50],
[NSNumber numberWithInt:60],
], @[[NSNumber numberWithInt:60],
[NSNumber numberWithInt:50],
[NSNumber numberWithInt:40],
[NSNumber numberWithInt:30],
[NSNumber numberWithInt:20],
[NSNumber numberWithInt:10]
], @[[NSNumber numberWithInt:10],
[NSNumber numberWithInt:20],
[NSNumber numberWithInt:30],
[NSNumber numberWithInt:40],
[NSNumber numberWithInt:50],
[NSNumber numberWithInt:60],
], @[[NSNumber numberWithInt:10],
[NSNumber numberWithInt:20],
[NSNumber numberWithInt:30],
[NSNumber numberWithInt:40],
[NSNumber numberWithInt:50],
[NSNumber numberWithInt:60],
]];
}
}
else if (selectedOption == PlaceholderThree) {
if ([organisation isKindOfClass:[Organisation class]]) {
return @[[NSNumber numberWithInt:50]];
}
}
else if (selectedOption == PlaceholderFour) {
if ([organisation isKindOfClass:[Organisation class]]) {
return @[[NSNumber numberWithInt:50]];
}
}
return nil;
}
#pragma mark - CPTPlotDataSource methods
-(NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot {
return [self.organisationValues count];
}
-(NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index {
if ((fieldEnum == CPTBarPlotFieldBarTip) && (index < [self.organisationValues count])) {
if ([plot.identifier isEqual:@"national"]) {
return self.organisationValues[index];
}
else if ([plot.identifier isEqual:@"organisational"]) {
return self.organisationValues[index];
}
else if ([plot.identifier isEqual:@"comparatorOne"]) {
return self.comparatorOneValues[index];
}
else if ([plot.identifier isEqual:@"comparatorTwo"]) {
return self.comparatorTwoValues[index];
}
else if ([plot.identifier isEqual:@"comparatorThree"]) {
return self.comparatorThreeValues[index];
}
else if ([plot.identifier isEqual:@"natYear2011"]) {
return self.organisationValues[index][0];
}
else if ([plot.identifier isEqual:@"orgYear2011"]) {
return self.organisationValues[index][1];
}
else if ([plot.identifier isEqual:@"natYear2012"]) {
return self.organisationValues[index][2];
}
else if ([plot.identifier isEqual:@"orgYear2012"]) {
return self.organisationValues[index][3];
}
else if ([plot.identifier isEqual:@"natYear2013"]) {
return self.organisationValues[index][4];
}
else if ([plot.identifier isEqual:@"orgYear2013"]) {
return self.organisationValues[index][5];
}
else if ([plot.identifier isEqual:@"orgYear2013"]) {
return self.organisationValues[index][6];
}
}
return [NSDecimalNumber numberWithFloat:index];
}
. 많은 감사합니다.
EDIT 여기서 2
는 재정의 된 클래스의 예이다.나는 데이터의 이름을 바꾸고 문장을 변경해야했다.
#pragma mark Populating and updating arrays
- (NSArray *)populateDataArray:(Organisation *)organisation option:(DataOptions)selectedOption
{
if (selectedOption == DATA_ONE) {
if ([organisation isKindOfClass:[Organisation class]]) {
return @[organisation.population.rate_20_25,
organisation.population.rate_26_30,
organisation.population.rate_31_35,
organisation.population.rate_36_40
}
}
else if (selectedOption == DATA_TWO) {
return nil;
}
else if (selectedOption == DATA_THREE) {
if ([organisation isKindOfClass:[Organisation class]]) {
return @[organisation.population.rate_20_40];
}
}
else if (selectedOption == DATA_FOUR) {
if ([organisation isKindOfClass:[Organisation class]]) {
return @[organisation.population.rate_20_50];
}
}
return nil;
}
플롯 데이터에 문제가 있습니다. 데이터 소스 메소드와 그로부터 리턴되는 값을 보여주십시오. –
내 질문을 편집했습니다. 감사. – pls
그래프에 전송되는 플롯 데이터가 예상 한 것과 다른 것으로 의심됩니다. 플롯은 NSNull 또는 NAN 값을 건너 뜁니다. 플롯 범위 나 막대 그래프 설정이 'NAN' 막대 좌표를 유발할 수도 있습니다. 어떤 버전의 Core Plot을 사용하고 있습니까? –