2011-12-01 2 views
0

문맥은 일련의 온도를 그래프로 나타내려고한다는 것입니다. 응용 프로그램이 열립니다왜 이것이 경로를 그리지 않습니까?

이 openfile이 사용되는 I는 다음이있는 NSString "의 FileContents"로 수정 된 csv 파일을 읽어 내 문서 클래스를 초기화한다 : 내 응용 프로그램 (내가 그것을 이해) 다음과 같이 작동하는 순간

분리 자나 공백없는 값을 포함하는 문자열 배열로 분리하십시오. 다음과 같이 그 후

NSArray *temps = [fileContents componentsSeparatedByCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@"\n|\r"]]; 

을 내 사용자 지정보기는 TemperatureGraph 클래스를 초기화하고, 바로 그것을 아래 코드에서 볼 수있는 currentlog이되는 배열을 전달합니다. 인스턴스 ID는 최신 값입니다.

마지막으로 나는 호출 :
[current drawpath]; 

아래의 인스턴스 메소드가 어느입니다 :

- (void) drawpath 
{ 
    NSBezierPath *program = [NSBezierPath bezierPath]; 
    NSPoint st = NSMakePoint(0, 0); 

    [program moveToPoint:st]; 
    [program setLineWidth:10]; 
    [program setLineCapStyle:NSRoundLineCapStyle]; 
    [[NSColor blueColor] setStroke]; 
    [program stroke]; 

    NSUInteger a, b; 
    a = [currentlog count]; 
    b = 0; 
    while (b <= a) { 
     NSPoint new; 
     float x; 
     x = 5 * b; 

     new = NSMakePoint(x, [[currentlog objectAtIndex:b] floatValue]); 
     [program lineToPoint:new]; 
     [program stroke]; 
     b += 6; 
    } 
} 

왜 작동하지 않습니다? 정의가 작동하지 않습니다 : 응용 프로그램이 컴파일되고 실행되지만 빈 창이 있습니다.

또한 여기에있는 신참 오류를 지적하고 코드에 영향을주지 않습니다. 아직 학습 단계에 있으므로.

답변

2

활성 그래픽 컨텍스트가없는 경우 그리기가 발생하지 않습니다. 위의 drawpath 메서드가 NSView 서브 클래스에 있다고 가정합니다. 거기에 drawRect:이라는 메서드를 재정의해야합니다. 하위 클래스를 만들 때 스텁으로 추가되었을 수도 있습니다.

코코아는 뷰를 그릴 때가이 메서드를 호출합니다. 즉, 호출 될 때 그래픽 컨텍스트가 설정되고 사용자가 수행하는 드로잉 코드가 실제로 화면에 표시됩니다.

drawpath 메서드를 drawRect:에서 호출하기 만하면 라인이 표시됩니다. 기억해야 할

일반적인 점은 drawRect: 내에서 제외 (모든 그리기 코드를 직접 호출하지 않는다는 것입니다 - 당신도 디스플레이 ([myView setNeedsDisplay:YES];을 필요로보기를 표시하거나 시스템 할 자신이

+0

감사를 할 수 있습니다.! 그래서 간단 해요! 그래서 드로잉이 데이터가 떨어져 내 문서 하위 클래스에서 내 사용자 정의보기로 전달됩니다 전달됩니다. 그것은 init 메서드가 호출 될 때까지.이 일을해야하는 다른 방법 있는가? initWithData 같은 것이지만 View 서브 클래스의 경우? – Priesto

+0

초기화 한 후에도 전달할 수없는 이유는 나중에 데이터를 변경할 수있는 옵션을 제공합니다. 데이터를 업데이트하면'setNeedsDisplay :'를 호출하면 뷰가 새 데이터로 다시 그리기. – jrturton

+0

고마워. 나는 이것을 시도했지만 데이터를 전달하는 방식에 문제가있다. 그러나 나는 또 다른 문제를 추측한다. 이것이 작동하지 않는 이유를 말해 줄 수 있다고 가정하지 마십시오. NSDocument 메소드에서 : 'TemperatureGraph * current = [[TemperatureGraph alloc] init]; // 클래스보기 NSUInteger a = [temps count]; // 35857 항목 [현재 setlog : temps]; ' 온도 그래프에 있음.m : '- (void) setlog : (NSArray *) 로그 { 현재 로그 = 로그; [self setNeedsDisplay : YES]; }' 결과적으로 항목이없는 배열이 생성됩니까? – Priesto

관련 문제