iOS 7.0 및 시스템 성능 저하에서 유효하지 않은 컨텍스트 0x0
나는이 두려운 문제에 대해 찾을 수있는 많은 검색 결과를 읽었습니다. 불행히도 각각은 특정 함수 호출에 집중하는 것 같습니다.
내 문제는 여러 함수에서 동일한 오류가 발생한다는 것입니다.이 함수는 내가 사용하는 함수에서 다시 호출되는 것 같습니다.
설상가상으로 실제 코드는 다른 프로젝트에서 가져 오는 사용자 정의 개인 프레임 워크 내에 있으며, 디버깅이 간단하지 않습니까?
누구든지 올바른 방향으로 나를 가리킬 수 있습니까? 특정 메소드를 잘못 호출하거나 컨텍스트가 잘못되었다는 느낌이 들지만 xcode의 출력은 그다지 도움이되지 않습니다.
: CGContextSetFillColorWithColor : 유효하지 않은 컨텍스트 0x0. 이것은 심각한 오류입니다. 이 응용 프로그램 또는 사용하는 라이브러리가 유효하지 않은 컨텍스트를 사용하므로 시스템 안정성과 안정성이 전반적으로 저하됩니다. 이 통지는 예의입니다 :이 문제를 해결하십시오. 다음 업데이트에서 치명적인 오류가됩니다.
: CGContextSetStrokeColorWithColor : 유효하지 않은 컨텍스트 0x0. 이것은 심각한 오류입니다. 이 응용 프로그램 또는 사용하는 라이브러리가 유효하지 않은 컨텍스트를 사용하므로 시스템 안정성과 안정성이 전반적으로 저하됩니다. 이 통지는 예의입니다 :이 문제를 해결하십시오. 다음 업데이트에서 치명적인 오류가됩니다.
CGContextSaveGState : 유효하지 않은 컨텍스트 0x0. 이것은 심각한 오류입니다. 이 응용 프로그램 또는 사용하는 라이브러리가 유효하지 않은 컨텍스트를 사용하므로 시스템 안정성과 안정성이 전반적으로 저하됩니다. 이 통지는 예의입니다 :이 문제를 해결하십시오. 다음 업데이트에서 치명적인 오류가됩니다.
: CGContextSetFlatness : 유효하지 않은 컨텍스트 0x0. 이것은 심각한 오류입니다. 이 응용 프로그램 또는 사용하는 라이브러리가 유효하지 않은 컨텍스트를 사용하므로 시스템 안정성과 안정성이 전반적으로 저하됩니다. 이 통지는 예의입니다 :이 문제를 해결하십시오. 다음 업데이트에서 치명적인 오류가됩니다.
: CGContextAddPath : 유효하지 않은 컨텍스트 0x0. 이것은 심각한 오류입니다. 이 응용 프로그램 또는 사용하는 라이브러리가 유효하지 않은 컨텍스트를 사용하므로 시스템 안정성과 안정성이 전반적으로 저하됩니다. 이 통지는 예의입니다 :이 문제를 해결하십시오. 다음 업데이트에서 치명적인 오류가됩니다.
: CGContextDrawPath : 유효하지 않은 컨텍스트 0x0. 이것은 심각한 오류입니다. 이 응용 프로그램 또는 사용하는 라이브러리가 유효하지 않은 컨텍스트를 사용하므로 시스템 안정성과 안정성이 전반적으로 저하됩니다. 이 통지는 예의입니다 :이 문제를 해결하십시오. 다음 업데이트에서 치명적인 오류가됩니다.
: CGContextRestoreGState : 유효하지 않은 컨텍스트 0x0. 이것은 심각한 오류입니다. 이 응용 프로그램 또는 사용하는 라이브러리가 유효하지 않은 컨텍스트를 사용하므로 시스템 안정성과 안정성이 전반적으로 저하됩니다. 이 통지는 예의입니다 :이 문제를 해결하십시오. 다음 업데이트에서 치명적인 오류가됩니다.
: CGContextGetBlendMode : 유효하지 않은 컨텍스트 0x0. 이것은 심각한 오류입니다. 이 응용 프로그램 또는 사용하는 라이브러리가 유효하지 않은 컨텍스트를 사용하므로 시스템 안정성과 안정성이 전반적으로 저하됩니다. 이 통지는 예의입니다 :이 문제를 해결하십시오. 다음 업데이트에서 치명적인 오류가됩니다.
이러한 오류는 사용자 정의보기가 제공되거나 상속 된 클래스 중 하나 일 때 발생할 수 있습니다. 어떤 시점에서 키보드가 입력을 제공하지 않을 때까지 여러 번 생성됩니다. 터치 이벤트는 계속 등록되지만 시스템 속도가 느려지고 결국 할당되지 않은 개체 오류가 발생할 수 있습니다.
편집 # 1 : 가져 오는 프레임 워크에 액세스 할 수 있지만 클래스에서 문제를 일으키는 이상한 점은 없습니다.
편집 # 2 : 개발자 용 iOS 7.1이 출시되었다는 이메일을 받았습니다. 이것이 사라지거나 더 나빠지거나 해결할 수 있는지 궁금합니다.
다른 사람들은 핵심 그래픽 컨텍스트에 액세스하는 코드를 게시하도록 요청하지만 이것이 문제인 것 같습니다. 이 잘못된 컨텍스트 0x0 오류 메시지는 iOS 7에서 일반적이고 재현하기 쉽습니다. 실제로, 코드가없는 스토리 보드를 사용하여 오류를 재현 할 수 있습니다. UITextField를 IB의 캔버스로 드래그하고 앱을 실행 한 다음 텍스트 필드 내부를 두 번 탭합니다.
많은 상황에서 잘못된 컨텍스트 0x0 오류 메시지를 심각하게 받아들이 기 어렵습니다. 귀하의 상황이 더 큰 우려를 필요로하는지 모르겠습니다 (특히 그래픽 컨텍스트를 명시 적으로 사용하는 경우 조사 할 가치가 있음을 Rob Napier에 동의합니다).
내 프로젝트에서 이러한 오류 중 많은 부분이 언젠가 마술처럼 사라지기를 바라고 있습니다 (그러나 그 날에는 7.0.3이 나오지 않았습니다).
업데이트 : Xcode 5.1을 설치하고 iOS 7.1을 대상으로 한 후 빈 텍스트 필드 내부를 두 번 눌러 오류를 재현 할 수 없습니다.
어떤 코드가 이러한 로그를 발생시키는 지 궁금한 경우 에 기호 브레이크 포인트 를 추가 할 수 있습니다CGPostError
.
오류의 이러한 종류의 역사적하지 않을 때 내 설립되는 컨텍스트 내에서 코어 그래픽 함수를 호출의 결과 drawRect
또는 같은 호출 사이 UIGraphicsBeginImageContext
와 UIGraphicsEndImageContext
(시작 컨텍스트를 종료하는 같은 또는 다른 UIKit 기능).
그러나 bilobatum은이 특정 오류 시퀀스가 자신의 답변에서 언급 한 iOS 7 버그의 결과 일 수 있다고 정확합니다. iOS6 대상에서 이러한 오류가 표시되지 않거나이 개인 프레임 워크를 빠르게 스캔 한 후 Core Graphics 호출이 의심되는 경우이 iOS 7 버그 일 수 있습니다. 잘 잡아라, bilobatum!
UIGraphicsBeginImageContext( size );
CGContextRef context = UIGraphicsGetCurrentContext();
size.width 또는 size.height가 0이 아닌지 확인하십시오.
CGPostError에 기호 중단 점을 추가하여 확인할 수 있습니다.
간단한 UITextField (키보드가 표시되지 않고 콘솔에 잘못된 컨텍스트 오류 메시지가 많이 있음)와 함께이 문제가 발생했습니다. 방금 SO에 대한 다른 문제를 찾아 해결책을 찾았습니다. CFBundle CertUIFramework.axbundle에 대한 실행 파일을 찾을 수 없습니다
그냥 해:
iOS 시뮬레이터> 컨텐츠 및 설정 재설정 ...을 클릭하고 다시 실행하십시오.
더 이상 문제가 없어야합니다
내 경우에는이 코드에 다음과 같은 오류가 있습니다.
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>
정답 : 문제는 - (void)drawRect:(CGRect)rect
이 방법 이외의 CGContext 등과 같은 핵심 그래픽 요소를 사용했기 때문 입니다.
이제 친절하게 코드를이 방법으로 옮기십시오. 그리고 경고 / 오류가 발생합니다.
CATextLayer 개체에서 사용되는 NSAttributedString 사전의 특성으로 UIColor 개체를 사용했기 때문에이 오류가 발생했습니다. CGColorRef를 보유하도록 사전을 변경했으며 오류가 사라졌습니다.
[wordAttributes setObject:(id)[UIColor whiteColor].CGColor forKey:(NSString*)kCTForegroundColorAttributeName];
나는 문맥에서 반환 된 경우에 있었다 UIGraphicsGetCurrentContext()
입니다 NULL
당신은 아무것도에 대한이 메시지가 나타납니다 그것을 사용하려고하면합니다. 컨텍스트를 아직 설정하지 않은 상태에서 직접 호출 하는 대신 UIGraphicsPushContext
을 호출하기 전에 컨텍스트를 푸시하는 것은보기의 책임 입니다. 내 직감은 iOS 7 이전에 컨텍스트가에 대한보기로 푸시 되었으며 이제 iOS 7에서 컨텍스트가 처음 호출 될 때까지 푸시되지 않는다는 것입니다. 일부 UIKit 코드가 직접 호출되는 것으로 의심 되므로 사용자 지정 드로잉을 수행하지 않아도 일부 코드에 문제가 있습니다.drawRect:
drawRect:
[view setNeedsDisplay]
init
drawRect:
drawRect:
솔루션 (사용자 정의 도면을 수행하는 경우) :
drawRect:
직접 전화 하거나 사용 하지 않거나[view setNeedsDisplay]
즉시 도면을 사용해야하는 경우[view.layer draw]
- 당신
drawRect:
의 컨텍스트를 얻지만이 if 문의 본문 밖에서 사용하지 마십시오if (context) {<do drawing here>}
영향을받는 뷰에서 자동 레이아웃을 끄면 뷰 내에서 UI 요소 (특히 프로그래밍 방식으로 그려진 사용자 정의 요소)를 배치하고 이동할 경우이 오류가 사라집니다. 이 증상을 발견했을 때 JVFloatLabeledTextField를 사용하고있었습니다.
경우에 따라 회선을 포함해야 할 수도 있습니다 #import <QuartzCore/QuartzCore.h>
.
사용자 지정 CALayer 구현의 drawInContext (..) 메서드에서이 오류가 발생했습니다. UIBezierPath는 사용자 정의 계층에서 기본적으로 nil 인 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()
}
필자의 경우 캡 삽입이 가능한 resible 이미지를 만들 때이 경고가 발생했습니다. 문제는 "캡핑되지 않은"영역에 최소 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];
아래 코드를 사용하여 컨텍스트에서 UIImage를 작성했습니다.
UIGraphicsBeginImageContext (size); CGContextRef 컨텍스트 = UIGraphicsGetCurrentContext (); CGContextSetFillColorWithColor (컨텍스트, color.CGColor); CGContextFillRect (문맥, (CGRect) {. size = size}); UIImage * image = UIGraphicsGetImageFromCurrentImageContext (); UIGraphicsEndImageContext ();
따라서 오류가 발생했습니다.
그래서 파생 데이터 내용을 제거하고 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
델리게이트 루틴을 구현하지 않고. 그 줄을 제거하면 문제가 해결되었습니다.
자리 표시 자 텍스트 만있는 빈 필드를 터치 할 때 UITextField에서이 문제가 발생했습니다. 빈 필드를 제거하기 위해 다음 해결 방법을 사용했습니다.
-(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
}
아래 그림과 같이 CGContextRef를 릴리스했기 때문에이 오류가 발생했습니다.
- (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이 아닌 경우 경고가 트리거되지 않습니다.
그래서 textFieldDidBeginEditing에서 다음을 수행했습니다.
- (void)textFieldDidBeginEditing:(UITextField *)textField {
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
if (pasteboard.string.length == 0) {
pasteboard.string = @" ";
}
}
아이폰 4s, 5 및 5s의 iOS 7.0.3 시뮬레이터에서 이것을 테스트했지만 더 이상 경고가 표시되지 않습니다. 또한 iphone 6 및 6 plus의 iOS 8 시뮬레이터에서 이것을 테스트했지만 iOS 8이 영향을받지 않는다고 생각합니다.
이 문제를 발견하기 전에 이틀간의 좌절을 겪었으므로 같은 문제를 겪고있는 사람들에게 도움이되기를 바랍니다.
UIBezierPath를 사용할 때 오류가 발생하고 획 또는 칠의 색상을 설정 한 경우 설정된 색상 코드를 다른 위치가 아닌 drawRect 함수에 넣으십시오.
이것은 해 키지 만 그것은 나를 위해 일했습니다.
나는 설정 UIImageView
의 UITableViewCell
의는 init
, 그것을 크기와 제약 조건을 제공합니다.
그런 다음 내 뷰 컨트롤러 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
. 위의 코드는 좋은 기본값입니다
'IT' 카테고리의 다른 글
디렉토리 트리에서 모든 심볼릭 링크를 찾으려면 어떻게합니까? (0) | 2020.04.25 |
---|---|
Bash에서 굵은 텍스트를 어떻게 출력합니까? (0) | 2020.04.25 |
문자열을 나누는 방법과 구분 기호를 유지하는 방법은 무엇입니까? (0) | 2020.04.25 |
QuotaExceededError : Dom exception 22 : 할당량을 초과 한 스토리지에 무언가를 추가하려고했습니다. (0) | 2020.04.25 |
StringBuilder에 개행을 추가하는 방법 (0) | 2020.04.25 |