Netinkamas 0x0 kontekstas pagal „iOS 7.0“ ir sistemos gedimas

Aš perskaičiau tiek daug paieškos rezultatų, kuriuos galėjau rasti šioje baisioje problemoje, deja, kiekvienas iš jų atrodo sutelktas į konkretų funkciją.

Mano problema yra ta, kad gaunu tą pačią klaidą iš kelių funkcijų, kurias manau, yra vadinamos funkcijomis, kurias naudoju.

Dar blogiau, tikrasis kodas yra vartotojo privačioje struktūroje, kuri importuojama į kitą projektą, todėl derinimas nėra toks paprastas?

Ar kas nors gali man pasakyti teisingą kryptį? Turiu jausmą, kad kai kuriuos metodus vadinu neteisingai arba blogai, tačiau iš xcode išeiga šiuo metu nėra labai naudinga.

: CGContextSetFillColorWithColor: Netinkamas kontekstas 0x0. Tai yra rimta klaida. Ši programa arba naudojama biblioteka naudoja netinkamą kontekstą ir taip prisideda prie bendro sistemos stabilumo ir patikimumo blogėjimo. Šis pranešimas yra mandagus: pataisykite šią problemą. Tai bus mirtina būsimos naujinimo klaida.

: CGContextSetStrokeColorWithColor: Netinkamas kontekstas 0x0. Tai yra rimta klaida. Ši programa arba naudojama biblioteka naudoja netinkamą kontekstą ir taip prisideda prie bendro sistemos stabilumo ir patikimumo pablogėjimo. Šis pranešimas yra mandagus: pataisykite šią problemą. Tai bus mirtina būsimos naujinimo klaida.

CGContextSaveGState: Netinkamas kontekstas 0x0. Tai yra rimta klaida. Ši programa arba naudojama biblioteka naudoja netinkamą kontekstą ir taip prisideda prie bendro stabilumo ir patikimumo sistemos blogėjimo. Šis pranešimas yra mandagus: pataisykite šią problemą. Tai bus mirtina būsimos naujinimo klaida.

: CGContextSetFlatness: Netinkamas kontekstas 0x0. Tai yra rimta klaida. Ši programa arba naudojama biblioteka naudoja netinkamą kontekstą ir taip prisideda prie bendro sistemos stabilumo ir patikimumo blogėjimo. Šis pranešimas yra mandagus: pataisykite šią problemą. Tai bus mirtina būsimos naujinimo klaida.

: CGContextAddPath: Netinkamas kontekstas 0x0. Tai yra rimta klaida. Ši programa arba naudojama biblioteka naudoja netinkamą kontekstą ir taip prisideda prie bendro sistemos stabilumo ir patikimumo blogėjimo. Šis pranešimas yra mandagus: pataisykite šią problemą. Tai bus mirtina būsimos naujinimo klaida.

: CGContextDrawPath: neteisingas kontekstas 0x0. Tai yra rimta klaida. Ši programa arba naudojama biblioteka naudoja netinkamą kontekstą ir taip prisideda prie bendro sistemos stabilumo ir patikimumo blogėjimo. Šis pranešimas yra mandagus: pataisykite šią problemą. Tai bus mirtina būsimos naujinimo klaida.

: CGContextRestoreGState: Netinkamas kontekstas 0x0. Tai yra rimta klaida. Ši programa arba naudojama biblioteka naudoja netinkamą kontekstą ir taip prisideda prie bendro sistemos stabilumo ir patikimumo blogėjimo. Šis pranešimas yra mandagus: pataisykite šią problemą. Tai bus mirtina būsimos naujinimo klaida.

: CGContextGetBlendMode: neteisingas kontekstas 0x0. Tai yra rimta klaida. Ši programa arba naudojama biblioteka naudoja netinkamą kontekstą ir taip prisideda prie bendro sistemos stabilumo ir patikimumo blogėjimo. Šis pranešimas yra mandagus: pataisykite šią problemą. Tai bus mirtina būsimos naujinimo klaida.

Šios klaidos gali atsirasti pateikiant pasirinktinį vaizdą arba vienoje iš paveldėtų klasių. Šiuo metu jie rodomi kelis kartus, kol klaviatūra įves duomenis. Jutikliniai įvykiai vis dar įrašomi, tačiau sistema sulėtėja ir galiausiai gali sukelti nepaskirstytų objektų klaidų.

EDIT # 1: turiu prieigą prie importuotos struktūros, bet nematau nieko keisto, kuris sukelia problemą.

EDIT # 2: Aš ką tik gavau laišką, kad „iOS 7.1“ buvo išleistas kūrėjams. Man įdomu pamatyti, ar tai išnyksta, ar pablogėja arba gali būti išspręsta.

213
25 окт. rinkinys Ælex 25 okt. 2013-10-25 23:53 '13, 23:53, 2013-10-25 23:53
@ 25 atsakymai

Kiti prašys paskelbti kodą, kuriame nurodote pagrindinį grafikos kontekstą, bet abejoju problema. Šie negaliojantys 0x0 kontekstinių klaidų pranešimai yra paprasti ir lengvai atkuriami „iOS 7“. Į IB drobę nuvilkiau UITextField, pradėjau programą ir du kartus palietiau teksto lauką.

Daugeliu atvejų man sunku suvokti neteisingus klaidų pranešimus 0x0. Nežinau, ar jūsų padėtis reikalauja didelių rūpesčių (sutinku su Rob Napier, kad verta ištirti, ypač jei aiškiai naudojate grafinį kontekstą).

Savo projektuose tikiuosi, kad daugelis šių klaidų bus stebuklingai išnykusios vieną kartą (tačiau ta diena nebuvo 7.0.3).

Atnaujinimas: įdiegus Xcode 5.1 ir nukreipus į „iOS 7.1“, nebegaliu pakartoti klaidos dukart spustelėjęs tuščiame teksto lauke.

162
26 окт. Atsakymas pateikiamas bilobatum 26 spalis. 2013-10-26 00:26 '13 - 0:26 2013-10-26 00:26

Jei įdomu, koks kodas sukelia šiuos žurnalus, galite pridėti simbolinę pertraukąCGPostError .

border=0
198
27 окт. Atsakymas duotas „ Art Gillespie 27 oct. 2013-10-27 00:43 '13 prie 0:43 2013-10-27 00:43

Šios klaidų rūšys istoriškai yra „Core Graphics“ funkcijų skambinimo rezultatas, jei jos nėra kontekste, nustatytame drawRect , arba tarp skambučių, tokių kaip UIGraphicsBeginImageContext ir UIGraphicsEndImageContext (arba kitos UIKit funkcijos, pvz., Konteksto pradžia ir pabaiga).

Tačiau sakydamas, kad bilobatumas yra teisus, kad ši konkreti klaidų seka gali būti „iOS 7“ klaidos, kurią jis nurodo savo atsakyme, rezultatas. Jei nematote šių klaidų savo tikslams, iOS6, arba jei po to, kai greitai nuskaitysite šią privačią struktūrą, nerandate jokių įtartinų skambučių į „Core Graphics“, tai gali būti tik „iOS 7“ klaida. Geras sugavimas, bilobatum!

42
26 окт. atsakymą pateikė Robas spalio 26 d. 2013-10-26 00:26 '13 - 0:26 2013-10-26 00:26
 UIGraphicsBeginImageContext( size ); CGContextRef context = UIGraphicsGetCurrentContext(); 

įsitikinkite, kad size.width arba size.height yra ne 0,

CGPostError galite pridėti simbolių lūžio tašką, kad patikrintumėte

26
11 марта '14 в 10:46 2014-03-11 10:46 atsakymą pateikė lbsweek kovo 14 d. 14 d. 10:46 2014-03-11 10:46

Turėjau šią problemą su paprastu UITextField (klaviatūra nebuvo rodoma ir serveris nerodė daugelio neteisingų kontekstinių klaidų pranešimų). Aš ką tik rado problemą, ieškodamas kitos SO problemos: Nepavyko rasti vykdomojo failo CFBundle CertUIFramework.axbundle

Tiesiog sekite:

Spustelėkite „iOS Simulator“> „Reset Content and Settings“ ir paleiskite jį dar kartą.

Problema neturėtų būti ten

19
08 янв. Kevino Delordo atsakymas Jan 08 2014-01-08 19:03 '14, 19:03, 2014-01-08 19:03

Mano atveju turiu šias klaidas šiame kode:

 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]; 

po kai kurių minčių ir bandymų pastebėjau problemą - tai buvo šis iššūkis:

 [path fill]; 

kaip aš sužinojau - mano kode šis kvietimas nėra reikalingas, nes užpildymas bus atliktas kitaip - todėl tiesiog jį ištrinu.

15
03 дек. Atsakyti Denis Kozhukhov 03 dec. 2013-12-03 09:50 '13, 9:50, 2013-12-03 09:50

Turėjau tą pačią problemą ir pamiršau importuoti „QuartzCore / QuartzCore.h“. Tai išsprendė mano problemą su šiomis klaidomis.

  #import <QuartzCore/QuartzCore.h> 
5
31 янв. David Roop atsakymas Jan 31 2014-01-31 05:32 '14, 5:32 2014-01-31 05:32

Tiesioginis atsakymas: problema yra ta, kad naudojote pagrindinius grafinius elementus, tokius kaip CGContext ir pan. Skirtingai nuo - (void)drawRect:(CGRect)rect šio metodo.

Dabar maloniai perkelkite savo kodą į šį metodą. Ir jis planuos, suteikdamas jums įspėjimus / klaidas.

4
14 мая '15 в 9:49 2015-05-14 09:49 atsakymą pateikė vartotojo3693546 gegužės 14 d., 15 val. 9:49 2015-05-14 09:49

Gavau šią klaidą, nes aš naudoju UIColor objektą kaip atributą NSAttributedString žodyne, kuris buvo naudojamas CATextLayer objekte. Aš pakeitiau žodyną, kad galėčiau atlikti „CGColorRef“, o klaida išnyko.

 [wordAttributes setObject:(id)[UIColor whiteColor].CGColor forKey:(NSString*)kCTForegroundColorAttributeName]; 
4
16 апр. atsakymą pateikė Collin , balandžio 16 d 2014-04-16 00:51 '14 at 0:51 2014-04-16 00:51

Išjungus autoruną paveiktame vaizde, ši klaida kai kuriais atvejais išnyksta, kai įkeliate ir perkeliate naudotojo sąsajos elementus (ypač pritaikytus programiniu būdu) formoje. JVFloatLabeledTextField, kai atradau šį simptomą, naudoju.

2
23 февр. Atsakymą pateikė JuJoDi vasario 23 d. 2014-02-23 05:01 '14 at 5:01 2014-02-23 05:01

Turėjau atvejų, kai kontekstas, grąžintas iš UIGraphicsGetCurrentContext() yra NULL , ir jei bandysite jį naudoti kažkam, šis pranešimas bus rodomas. Kyla klausimas, kaip kontekstą interpretuoti naudojant UIGraphicsPushContext prieš skambinant drawRect: jei skambinate „ drawRect: tiesiogiai, o ne [view setNeedsDisplay] , rizikuojate, kad kontekstas dar nėra nustatytas. Mano spėjimas yra tai, kad prieš iOS 7, kontekstas buvo nuspaudžiamas pristatymui „ init , o dabar „iOS 7“ kontekste kontekstas nepaspaudžiamas iki pirmojo skambučio, kuriam bus drawRect: Įtariu, kad kai kurie UIKit kodai skamba drawRect: tiesiogiai, todėl kyla problemų su kai kuriais kodais, net jei nepritaikytas pritaikytas brėžinys.

Sprendimai (atliekant pasirinktinį brėžinį):

  • Negalima skambinti „ drawRect: tiesiogiai, naudokite [view setNeedsDisplay] arba jei reikia nedelsiant naudoti [view.layer draw] vaizdą
  • drawRect: gaukite kontekstą, bet nenaudokite to už šio korpuso, jei if (context) {<do drawing here>}
2
14 янв. atsakymas duotas jamone 14 jan. 2014-01-14 20:54 '14, 20:54, 2014-01-14 20:54

Mano atveju turėjau šį įspėjimą, kai sukūrėte atvaizdą su užrašu su užrašu. Problema buvo ta, kad neuždariau mažiausiai 1 pikselio „neapribotoje“ srityje.

  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]; 
2
09 марта '15 в 18:28 2015-03-09 18:28 atsakymas pateikiamas balkoth kovo 09 '15 , 18:28 2015-03-09 18:28

Gavau šią klaidą, pritaikytą naudojant „CALIner“ pritaikymą „DrawInContext“ (..) metodui. UIBezierPath bando naudoti UIGraphicsGetCurrentContext (), kuris vartotojo sluoksnyje yra nulinis. internete pateikiami dokumentai labai aiškiai paaiškina -

Jei nenaudojate UIView objekto, kad atliktumėte piešinį, rankiniu būdu turite įvesti galiojantį kontekstą, naudodami UIGraphicsPushContext funkciją.

Čia yra kodas, kuris pagaliau dirbo su mano komentarais („Swift“ kodas, tačiau sprendimas yra vienodai nepriklausomas)

 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() } 
2
16 янв. atsakymas pateikiamas inder 16 d. 2015-01-16 21:59 '15, 21:59 pm 2015-01-16 21:59

Kai kuriais atvejais gali tekti įtraukti eilutę #import <QuartzCore/QuartzCore.h> .

2
17 июля '14 в 9:46 2014-07-17 09:46 atsakymą pateikė Nagarjun liepos 17 d. 14 val. 9:46 2014-07-17 09:46

Gavau klaidą su kodu

 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; 

ir pašalinus kodą

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

Pasaulis nutilo

1
23 марта '16 в 11:27 2016-03-23 11:27 atsakymą pateikė wossoneri kovo 23 d. 16 val. 11:27 2016-03-23 ​​11:27

Turiu tą pačią problemą. Mano projekte bandžiau sukurti tekstąField ir pridėti jį prie pdf failo. Senas kodas:

 - (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]}]; } 

Išsprendus šią problemą, kodas pasikeitė:

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

Radau UIColor SetFill sprendimą, kuris neveikia . Ir ačiū padėjėjui.

1
03 дек. Atsakymas duotas Kate 03 Dec. 2014-12-03 10:41 '14 at 10:41 2014-12-03 10:41

Sukūriau UII paveikslėlį iš konteksto naudodamas toliau pateiktą kodą:

 UIGraphicsBeginImageContext (dydis); CGContextRef kontekstas = UIGraphicsGetCurrentContext (); CGContextSetFillColorWithColor (kontekstas, color.CGColor); CGContextFillRect (kontekstas, (CGRect) {. Dydis = dydis}); UIImage * image = UIGraphicsGetImageFromCurrentImageContext (); UIGraphicsEndImageContext ();

Taigi, aš gavau klaidą.

Taigi, ištrinau išvestinių duomenų turinį, iš naujo paleidžiau Xcode. Ir jis dirbo.

1
03 февр. atsakymas pateikiamas Susipažinkite 03 vas. 2014-02-03 13:16 '14 at 13:16 2014-02-03 13:16

Kaip ir kiti čia komentavę, šį įspėjimą gavau, kai padariau vieną iš šių veiksmų:

Tuščio teksto lauke: dukart bakstelėkite, palieskite ir palaikykite, ilgai paspauskite.

Atrodo, kad tai veikia tik „iOS 7.0.3“.

Radau darbą, įspėjimas nebus rodomas, jei jūsų kartonas nebus NULL.

Taigi tekstoFieldDidBeginEditing:

 - (void)textFieldDidBeginEditing:(UITextField *)textField { UIPasteboard *pasteboard = [UIPasteboard generalPasteboard]; if (pasteboard.string.length == 0) { pasteboard.string = @" "; } } 

Aš išbandiau jį iOS 7.0.3 modeliu iphone 4s, 5 ir 5s ir negavau įspėjimo. Aš taip pat išbandžiau jį „iOS 8“ simuliatoriuje „iPhone 6“ ir „6“, bet nemanau, kad tai paveikė „iOS 8“.

Prieš atidarant šį darbą nuėjau per dvi dienas, todėl tikiuosi, kad mano atsakymas padės tiems, kurie turi tą pačią problemą.

0
31 авг. atsakymas pateikiamas RS-232 31 d. 2015-08-31 06:00 '15 , 6:00, 2015-08-31 06:00

Turėjau šią problemą „UITextField“, kai palietiau tuščią lauką naudodamas tik vietos žymeklio tekstą. Jei norite pašalinti tuščius laukus, naudoju šį darbą:

 -(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 } 
0
17 февр. atsakymą pateikė Peter B. Kramer . 2014-02-17 12:03 '14, 12:03 2014-02-17 12:03

Man tai padaryta, nes išleidau CGContextRef, kaip parodyta toliau:

 - (void)drawRect:(CGRect)rect { CGContextRef context = UIGraphicsGetCurrentContext(); // DRAW BACKGROUND CIRCLE CGContextSetFillColorWithColor(context, [[UIColor gray] colorWithAlphaComponent:0.6].CGColor); CGContextFillEllipseInRect(context, rect); // CGContextRelease(context); } 

Pašalinus išleidimą išspręsta problema

0
26 авг. atsakymas, kurį pateikė Kyle Redfearn 2014-08-26 20:41 '14, 20:41 2014-08-26 20:41

Aš jį gavau, kai klaidingai apibūdinau vaizdų pavadinimą veiklosImage metode UIActivity poklasyje

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

Tinkamo vaizdo įvedimas man išsprendė.

0
31 авг. atsakymą Saleh Albuga pateikė rugpjūčio 31 d. 2014-08-31 23:57 '14, 23:57 2014-08-31 23:57

Turiu šią klaidą, kai įdiegiau

 textfield.delegate = self 

Įgyvendinant bet kokią deleguotąją tvarką. Pašalinus šią eilutę, man išsprendė problemą.

0
15 апр. Danielio Åkessono atsakymas, pateiktas balandžio 15 d 2014-04-15 09:03 '14 at 9:03 2014-04-15 09:03

Pašalinkite programą iš simuliatoriaus ir paleiskite jį dar kartą.

0
12 сент. Nagarjun atsakymas, pateiktas rugsėjo 12 d. 2014-09-12 12:43 '14, 12:43 val. 2014-09-12 12:43

Jei įvyko klaida, kai naudojate UIBezierPath ir nustatote insulto arba užpildymo spalvą, nurodytą spalvos kodą įterpkite į DrawRect funkciją, o ne į kitas vietas.

0
04 июля '16 в 6:42 2016-07-04 06:42 atsakymas pateikiamas Chuyang liepos 4 d. 16 d. 6:42 2016-07-04 06:42

Man buvo atsakyta, kad man nereikalingai atlaisvinau grafikos kontekstą drawRect: CGPostError parodė simbolinę pertrauką, nurodiau kaltininką.

0
04 апр. Atsakymą pateikė Taylor Halliday 04 Bal. 2014-04-04 01:10 '14 ne 1:10 2014-04-04 01:10