programing

iOS 7.0에서 잘못된 컨텍스트 0x0 및 시스템 성능 저하

skycolor 2023. 4. 27. 22:06
반응형

iOS 7.0에서 잘못된 컨텍스트 0x0 및 시스템 성능 저하

저는 이 무서운 문제에 대해 찾을 수 있는 검색 결과를 최대한 많이 읽었는데, 안타깝게도 각각의 검색 결과는 특정 함수 호출에 초점을 맞춘 것 같습니다.

제 문제는 여러 기능에서 동일한 오류가 발생한다는 것입니다. 이 오류는 제가 사용하는 기능에서 다시 호출되는 것 같습니다.

엎친 데 덮친 격으로 실제 코드는 다른 프로젝트에서 가져오는 사용자 지정 개인 프레임워크 내에 있는데 디버깅이 그렇게 간단하지 않습니까?

누가 저를 올바른 방향으로 가리켜 줄 수 있나요?특정 메소드를 잘못 부르거나 컨텍스트가 좋지 않은 느낌이 들지만 xcode의 출력은 현 시점에서 큰 도움이 되지 않습니다.

CGContextSetFillColorWithColor: 컨텍스트 0x0이 잘못되었습니다.이것은 심각한 오류입니다.이 응용 프로그램 또는 이 응용 프로그램에서 사용하는 라이브러리가 잘못된 컨텍스트를 사용하고 있으므로 시스템 안정성과 안정성이 전반적으로 저하됩니다.이 공지는 예의입니다. 이 문제를 해결해 주십시오.다가오는 업데이트에서 치명적인 오류가 될 것입니다.

CGContextSetStrokeColorWithColor: 컨텍스트 0x0이 잘못되었습니다.이것은 심각한 오류입니다.이 응용 프로그램 또는 이 응용 프로그램에서 사용하는 라이브러리가 잘못된 컨텍스트를 사용하고 있으므로 시스템 안정성과 안정성이 전반적으로 저하됩니다.이 공지는 예의입니다. 이 문제를 해결해 주십시오.다가오는 업데이트에서 치명적인 오류가 될 것입니다.

CGContextSaveGState: 컨텍스트 0x0이 잘못되었습니다.이것은 심각한 오류입니다.이 응용 프로그램 또는 이 응용 프로그램에서 사용하는 라이브러리가 잘못된 컨텍스트를 사용하고 있으므로 시스템 안정성과 안정성이 전반적으로 저하됩니다.이 공지는 예의입니다. 이 문제를 해결해 주십시오.다가오는 업데이트에서 치명적인 오류가 될 것입니다.

CGContextSetFlatness: 컨텍스트 0x0이 잘못되었습니다.이것은 심각한 오류입니다.이 응용 프로그램 또는 이 응용 프로그램에서 사용하는 라이브러리가 잘못된 컨텍스트를 사용하고 있으므로 시스템 안정성과 안정성이 전반적으로 저하됩니다.이 공지는 예의입니다. 이 문제를 해결해 주십시오.다가오는 업데이트에서 치명적인 오류가 될 것입니다.

CGC ContextAddPath: 컨텍스트 0x0이 잘못되었습니다.이것은 심각한 오류입니다.이 응용 프로그램 또는 이 응용 프로그램에서 사용하는 라이브러리가 잘못된 컨텍스트를 사용하고 있으므로 시스템 안정성과 안정성이 전반적으로 저하됩니다.이 공지는 예의입니다. 이 문제를 해결해 주십시오.다가오는 업데이트에서 치명적인 오류가 될 것입니다.

CGC ContextDrawPath: 컨텍스트 0x0이 잘못되었습니다.이것은 심각한 오류입니다.이 응용 프로그램 또는 이 응용 프로그램에서 사용하는 라이브러리가 잘못된 컨텍스트를 사용하고 있으므로 시스템 안정성과 안정성이 전반적으로 저하됩니다.이 공지는 예의입니다. 이 문제를 해결해 주십시오.다가오는 업데이트에서 치명적인 오류가 될 것입니다.

CG 컨텍스트 복원GState: 컨텍스트 0x0이 잘못되었습니다.이것은 심각한 오류입니다.이 응용 프로그램 또는 이 응용 프로그램에서 사용하는 라이브러리가 잘못된 컨텍스트를 사용하고 있으므로 시스템 안정성과 안정성이 전반적으로 저하됩니다.이 공지는 예의입니다. 이 문제를 해결해 주십시오.다가오는 업데이트에서 치명적인 오류가 될 것입니다.

CGContextGetBlendMode: 컨텍스트 0x0이 잘못되었습니다.이것은 심각한 오류입니다.이 응용 프로그램 또는 이 응용 프로그램에서 사용하는 라이브러리가 잘못된 컨텍스트를 사용하고 있으므로 시스템 안정성과 안정성이 전반적으로 저하됩니다.이 공지는 예의입니다. 이 문제를 해결해 주십시오.다가오는 업데이트에서 치명적인 오류가 될 것입니다.

이러한 오류는 사용자 정의 보기 또는 해당 클래스 중 하나가 표시될 때 발생할 수 있습니다.키보드가 입력을 제공하지 않을 때까지 여러 번 산란합니다.터치 이벤트는 여전히 등록되지만 시스템 속도가 느려지고, 결국 할당되지 않은 개체 오류가 발생할 수 있습니다.

EDIT #1: 가져올 프레임워크에 액세스할 수 있지만, 클래스에서 문제를 일으키는 이상한 것을 볼 수 없습니다.

EDIT #2: iOS 7.1이 개발자용으로 출시되었다는 이메일을 방금 받았습니다.저는 이것이 사라질지, 더 나빠질지, 해결될 수 있을지 궁금합니다.

이러한 로그의 원인이 되는 코드가 궁금하면 다음에 심볼릭 중단점을 추가할 수 있습니다.CGPostError.

다른 사람들은 핵심 그래픽 컨텍스트에 액세스하는 코드를 게시하도록 요청할 것이지만, 저는 그것이 문제라고 생각하지 않습니다.이러한 잘못된 컨텍스트 0x0 오류 메시지는 iOS 7에서 일반적이고 쉽게 재현할 수 있습니다. 사실 저는 제로 코드의 스토리보드를 사용하여 오류를 재현할 수 있습니다.저는 IB의 캔버스에 UIT 텍스트 필드를 끌어다 놓고 앱을 실행한 다음 텍스트 필드 안을 두 번 누릅니다.

잘못된 컨텍스트 0x0 오류 메시지를 심각하게 받아들이기 어려운 경우가 많습니다.귀하의 상황이 더 큰 우려를 불러일으킬 수 있는지 모르겠습니다(특히 그래픽 컨텍스트를 명시적으로 사용하는 경우 조사할 가치가 있다는 Rob Napier의 의견에 동의합니다).

제 프로젝트에서는 이러한 오류 중 많은 부분이 언젠가 마법처럼 사라지기를 바랍니다(그러나 그날은 7.0.3과 함께 오지 않았습니다).

업데이트 : Xcode 5.1을 설치하고 iOS 7.1을 타겟팅한 후 빈 텍스트 필드 안을 더블 탭하여 더 이상 오류를 재현할 수 없습니다.

이러한 종류의 오류는 역사적으로 와 같은 호출(또는 컨텍스트를 시작하고 종료하는 것과 같은 다른 UIKit 함수) 내에서 또는 같은 호출 간에 설정되지 않은 경우 코어 그래픽 함수를 호출한 결과입니다.

하지만, 빌로바툼은 이 특정한 일련의 오류가 그가 답변에서 언급한 iOS 7 버그의 결과일 수 있다는 것이 맞습니다.iOS6 대상에서 이러한 오류가 나타나지 않거나 이 개인 프레임워크를 빠르게 스캔한 후 의심스러운 코어 그래픽 호출이 발견되지 않으면 iOS7 버그일 수 있습니다.잘 잡았어, 빌로바툼!

UIGraphicsBeginImageContext( size );
CGContextRef context = UIGraphicsGetCurrentContext();

사이즈를 확인하세요.너비 또는 크기.높이가 0이 아닙니다.

CGPostError에 기호 중단점을 추가하여 확인할 수 있습니다.

간단한 UITextField(키보드가 표시되지 않고 콘솔에 잘못된 컨텍스트 오류 메시지가 많이 표시됨)에서 이 문제가 발생했습니다.SO에서 다른 문제를 찾아 해결 방법을 찾습니다. CFBundle Cert에 대한 실행 파일을 찾을 수 없습니다.UIFramework.ax 번들

그냥 하기:

iOS Simulator > 콘텐츠 및 설정 재설정...을 클릭합니다.그리고 다시 뛰어요.

문제는 더 이상 거기에 있지 않아야 합니다.

이 코드에는 다음과 같은 오류가 있습니다.

CAShapeLayer *shapeLayer = [CAShapeLayer layer];
UIBezierPath *path;

path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(0, 0)];
[path addLineToPoint:CGPointMake(size*2, 0)];
[path addLineToPoint:CGPointMake(size, size*2)];
[path closePath];
[path fill];

shapeLayer.path = path.CGPath;
shapeLayer.strokeColor = [[UIColor blackColor] CGColor];
shapeLayer.fillColor = color;
shapeLayer.lineWidth = width;

[self addSublayer:shapeLayer];

몇 가지 생각과 테스트 후에 문제를 발견했습니다. 바로 이 전화였습니다.

[path fill];

제 코드에서는 충전이 다른 방법으로 수행될 것이기 때문에 이 호출이 필요하지 않습니다. 따라서 저는 것입니다.

저도 같은 문제가 있었는데 QuartzCore/QuartzCore.h를 가져오는 것을 잊었습니다. 이것은 이러한 오류로 제 문제를 해결했습니다.

    #import <QuartzCore/QuartzCore.h>

직답: 문제는 당신이 CG Context 등과 같은 핵심 그래픽 요소를 다른 곳에서 사용했기 때문입니다.- (void)drawRect:(CGRect)rect이 방법

이제 코드를 이 메서드로 이동하십시오.경고/오류를 제공하지 않습니다.

CATextLayer 개체에 사용 중인 NSA 속성 문자열 사전에서 UIColor 개체를 속성으로 사용하고 있었기 때문에 이 오류가 발생했습니다.CGColorRef를 보관하기 위해 사전을 바꿨더니 오류가 사라졌습니다.

[wordAttributes setObject:(id)[UIColor whiteColor].CGColor forKey:(NSString*)kCTForegroundColorAttributeName];

저는 그 맥락이 되돌아온 경우가 있습니다.UIGraphicsGetCurrentContext()이라NULL사용하려고 하면 이 메시지가 나타납니다.다음을 사용하여 컨텍스트를 푸시하는 것은 뷰의 책임입니다.UIGraphicsPushContext전화하기 drawRect:drawRect:대에직접 대신에 [view setNeedsDisplay]상황이 아직 설정되지 않은 위험을 감수해야 합니다.제 예감은 iOS 7 이전의 상황은 다음과 같은 관점에서 추진되었습니다.init. ㅠㅠㅠㅠㅠ iOS 7 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅠdrawRect:곧 호출됩니다. 코드가 UIKit를 부르고 됩니다.drawRect:직접적으로 그리고 이것이 사용자 지정 도면이 수행되지 않는 경우에도 일부 코드에 문제가 있는 이유입니다.

솔루션(사용자 지정 그리기를 수행하는 경우):

  1. 하지 마drawRect: 접직, 용사를 합니다.[view setNeedsDisplay]에는 즉도사하용경는우야해을또는면시를 사용합니다.[view.layer draw]
  2. 의 신의에서.drawRect:컨텍스트를 가져오지만 이 if 문 본문 밖에서 사용하지 마십시오.if (context) {<do drawing here>}

영향을 받는 보기에서 자동 레이아웃을 해제하면 보기 내에 UI 요소(특히 프로그래밍 방식으로 그려진 사용자 지정 요소)를 배치하고 이동하는 경우 이 오류가 사라집니다.레이블이 지정된 JVFloat을 사용하고 있었습니다.이 증상을 발견했을 때의 TextField.

에 따라 해야 할 수도 .#import <QuartzCore/QuartzCore.h>.

사용자 지정 CALayer 구현의 drawInContext(...) 메서드에서 이 오류가 발생했습니다.UIBizerPath는 사용자 지정 계층에서 기본적으로 0인 UIGraphicsGetCurrentContext()를 사용하려고 합니다.온라인 설명서는 이를 매우 명확하게 설명합니다.

그러나 UIView 개체를 사용하여 도면을 그리는 경우에는 UIGraphicsPushContext 함수를 사용하여 유효한 컨텍스트를 스택에 수동으로 푸시해야 합니다.

여기 내 의견을 인라인으로 처리한 코드가 있습니다(Swift 코드이지만 솔루션은 동일함).

override func drawInContext(ctx: CGContext!) {  
    var path = UIBezierPath()

    // 1. Make sure you push the CGContext that was first passed into you.
    UIGraphicsPushContext(ctx)
    path.moveToPoint(CGPoint(x: 0, y: 0))
    path.addLineToPoint(CGPoint(x: 150, y: 150))
    var lineColor = UIColor.blueColor()
    lineColor.setStroke()
    path.lineWidth = 2
    path.stroke(
    // 2. Pop the context after you are done.
    UIGraphicsPopContext()
}

저의 경우 캡셋이 있는 이미지를 생성할 때 이 경고가 발생했습니다.문제는 제가 "캡이 없는" 영역에 적어도 1픽셀을 남기지 않았다는 것입니다.

    UIImage *image = [UIImage imageNamed:@"name"];
    UIEdgeInsets edgeInsets = UIEdgeInsetsMake(20, 10, 20, 10);  //Problem here if the width is 20 or the height is 40
    image = [image resizableImageWithCapInsets:edgeInsets];

아래 코드를 사용하여 컨텍스트에서 UI 이미지를 만들고 있었습니다.

UI 그래픽 이미지 컨텍스트 시작(크기);
CGContextRef 컨텍스트 = UIGraphicsGetCurrentContext();
CGContextSetColor를 색상으로 채웁니다(콘텍스트, 색상).CG 색상);
CGContextFillRect(context, (CGRect){.size = size});

UIImage *image = UIGraphics현재 이미지 컨텍스트에서 이미지 가져오기();UI 그래픽 이미지 종료 컨텍스트();

그래서 오류가 발생했습니다.

그래서 파생 데이터 컨텐츠를 제거하고 XCode를 다시 시작했습니다.그리고 그것은 성공하였다.

저도 같은 문제가 있어요.제 프로젝트에서 textField를 만들어 PDF 파일에 추가하려고 합니다.이전 코드:

- (void) drawInContext:(CGContextRef)context {
    //Otherwise we're upside-down
    CGContextSetTextMatrix(context, CGAffineTransformMake(1.0,0.0, 0.0, -1.0, 0.0, 0.0));

    CGContextSetTextDrawingMode(context, kCGTextFill); // This is the default
    [[UIColor blackColor] setFill]; // ***This is the problem ***

    CGFloat x = self.rect.origin.x;
    CGFloat y = self.rect.origin.y + self.font.pointSize;
    [self.text drawAtPoint:CGPointMake(x, y)
            withAttributes:@{NSFontAttributeName:[UIFont fontWithName:@"Arial" size:12]}];
}

이 문제를 해결한 후 코드가 변경되었습니다.

old:[[UIColor blackColor] setFill]; 

new:CGContextSetFillColorWithColor(context, [[UIColor blackColor] CGColor]);

UIColor SetFill의 솔루션이 작동하지 않습니다.그리고 도우미에게 감사합니다.

코드에 오류가 있습니다.

UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:pointA];
[path addLineToPoint:pointB];
[path addLineToPoint:pointC];
[[UIColor colorWithHexString:@"EFEFEF"] set];
[path fill];
[path closePath];

CAShapeLayer *triangle = [CAShapeLayer layer];
triangle.fillColor = [UIColor colorWithHexString:@"EFEFEF"].CGColor;
triangle.path = path.CGPath;

return triangle;

그리고 코드를 제거한 후에.

[[UIColor colorWithHexString:@"EFEFEF"] set];
[path fill];

세상은 고요해졌습니다.

저에게, 대답은 불필요하게 그래픽 컨텍스트를 공개하는 것이었습니다.drawRect:CGPostError에 상징적인 중단점을 던지며 저는 범인을 가리켰습니다.

설정한 대로 이 오류가 발생했습니다.

textfield.delegate = self

딜러 루틴을 구현하지 않은 상태.그 선을 제거한 것이 저에게 문제를 해결했습니다.

공백 필드 위에 자리 표시자 텍스트만 터치했을 때 UI 텍스트 필드에서 이 문제가 발생했습니다.빈 필드를 제거하기 위해 다음 해결 방법을 사용했습니다.

-(void)textFieldDidBeginEditing:(UITextField *)textField{

        textField.text=[@" " stringByAppendingString:textField.text];

        //other stuff here
}


-(BOOL)textFieldShouldReturn:(UITextField *)textField{

         if(textField.text.length>0){
             if([[textField.text substringToIndex:1] isEqualToString:@" "])
                 textField.text=[textField.text substringFromIndex:1];
         }
         //  other stuff here
}

아래와 같이 CGC ContextRef를 릴리스하고 있었기 때문에 이 오류가 발생했습니다.

- (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();

    // DRAW BACKGROUND CIRCLE
    CGContextSetFillColorWithColor(context, [[UIColor gray] colorWithAlphaComponent:0.6].CGColor);
    CGContextFillEllipseInRect(context, rect);

//    CGContextRelease(context);
}

릴리스를 제거하면 문제가 해결됩니다.

UIActivity 하위 클래스의 activityImage 메서드에서 이미지 이름을 잘못 입력했을 때 받았습니다.

- (UIImage *)activityImage
{
    return [UIImage imageNamed:@"img.png"];
}

올바른 이미지를 입력하여 해결했습니다.

시뮬레이터에서 앱 제거 후 다시 실행

여기에 언급한 다른 사람들과 마찬가지로 다음 중 하나를 수행했을 때 이 경고를 받았습니다.

빈 텍스트 필드: 두 번 누르고 길게 누르고 있습니다.

이는 iOS 7.0.3에만 영향을 미치는 것으로 보입니다.

해결 방법을 찾았습니다. 붙여넣기 보드가 NULL이 아니면 경고가 트리거되지 않습니다.

그래서 textFieldDidBeginEdit에서 다음을 수행했습니다.

- (void)textFieldDidBeginEditing:(UITextField *)textField {

    UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
    if (pasteboard.string.length == 0) {

        pasteboard.string = @" ";

    }
}

iPhone 4s, 5s 및 5s에서 iOS 7.0.3용 시뮬레이터에서 이를 테스트했지만 더 이상 경고를 받지 않습니다.저도 아이폰 6, 6 플러스에서 iOS 8용 시뮬레이터에서 테스트를 해봤지만 iOS 8에는 영향이 없는 것 같습니다.

이 작업을 발견하기 전에 이틀 동안 좌절을 겪었기 때문에 저는 제 답변이 같은 문제를 겪고 있는 여러분들에게 도움이 되기를 바랍니다.

UIBezierPath를 사용할 때 오류가 발생하여 스트로크나 채우기의 색상을 설정할 경우 설정된 색상 코드를 다른 위치가 아닌 drawRect 함수에 넣습니다.

이것은 구식이지만 저에게는 효과가 있었습니다.

설정했습니다.UIImageView에서UITableViewCellinit크기와 제약 조건을 지정합니다.

그러면 내가 보기에는 컨트롤러의cellForRowAtIndexPath사용자 작업을 수행합니다.

let img = PFImageView(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
img.setImage(withFile: nil, defaultText: message.senderUsername)
cell.profileImageView?.image = img.image

그러면 오류가 발생하지 않습니다. 함수 아래에 실제 이미지를 설정합니다.UIImageView위의 코드는 양호한 기본값입니다.

언급URL : https://stackoverflow.com/questions/19599266/invalid-context-0x0-under-ios-7-0-and-system-degradation

반응형