2009-03-13 11 views
0

Ich erhalte eine EXC_BAD_ACCESS nachdem ich die Methode unten verlassen habe. An diesem Punkt wird htmlDocument ungültig, was es tun sollte, da es außerhalb des Gültigkeitsbereichs liegt. Aber bekomme ich deswegen den Fehler? Wenn das contentView (UIWebView) geladen wird, ist htmlDocument verschwunden. Aber hat contentView nicht schon was von loadHTMLString benötigt?verursacht dies EXC_BAD_ACCESS?

- (void)viewDidLoad { 
[super viewDidLoad]; 
//something other processing here 

NSString *htmlDocument = [NSString stringWithFormat:@"<html> \n" 
"<body>%@</body> \n" 
"</html>", aboutContent]; 
[contentView loadHTMLString:htmlDocument baseURL:[NSURL URLWithString:@"http://www.abc.com"]]; 

}

Gibt es einen besseren Weg, dies den ganzen Weg zum Scheitern zu folgen? Diese Methode zu verlassen ist das Ende der Zeile für meinen Code. SDK Sachen von dort.

Antwort

1

Auf einen Blick würde ich sagen, dass mit diesem Code nichts falsch ist, vorausgesetzt, 'aboutContent' ist ein gültiger Zeiger auf ein Objekt.

+0

Es ist ein gültiger Zeiger, da er eine Adresse hat. Etwas auf der anderen Linie fällt jedoch auseinander. Aber ich bin an diesem Punkt nicht beteiligt. Dieser Fehler ist normalerweise mit einem Speicherproblem verbunden. Ich habe es definitiv irgendwie verursacht. – 4thSpace

1

Sie können versuchen, Ihre App mit Guard Malloc auf dem Simulator laufen zu lassen, aber das bringt garantiert nichts. Ich schlage vor, dass Sie die Anweisungen erst auskommentieren, bis Sie denjenigen gefunden haben, der den Fehler verursacht.

1

Es ist nicht klar, was mit dem Code-Snippet passiert, das Sie ohne weiteren Kontext bereitgestellt haben. Es sieht so aus, als ob Sie nur etwas HTML lokal auf dem Gerät laden möchten. Warum tust du das nicht einfach?

- (void)viewDidLoad { 
    [webView loadRequest:[NSURLRequest 
          requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] 
               pathForResource:@"help/about.html" 
               ofType:@"html"]isDirectory:NO]]]; 
} 

Mit dieser Technik, können Sie HTML-basierte Dokumente direkt in Ihrem Telefon auf die Tatsache zu sein wiese ohne dass der Benutzer Autor können, dass sie an einer Web-Ansicht suchen tatsächlich: Dazu gehört Javascript, CSS, die ganze Kugel ein Wachs. Ich habe gesehen, wie Leute ihre iPhone-App ins Internet schicken, nur um eine statische Seite im Internet darzustellen, die wirklich nicht notwendig ist.

1

Aus dem Beispielcode im zweiten Post wird die Schaltfläche, die Sie UIBarButtonItem *button freigeben, von nichts beibehalten, das der Freigabe folgt, die Sie auskommentiert haben, und so wird es freigegeben.

Sie müssen die Schaltfläche zu einer anderen Ansicht hinzufügen (mit adSubview), damit es angezeigt wird und dann können Sie es freigeben. Die übergeordnete Ansicht behält die Schaltfläche bei.

Natürlich, wenn Sie erneut auf die Schaltfläche verweisen, sollte Ihre Ansicht Controller beibehalten und die Schaltfläche in seiner Dealloc freigeben.

2

Ab dem zweiten Post gibt die Zeile, die Sie auskommentiert haben ([button release]), ein Objekt frei, das bereits markiert ist, um automatisch freigegeben zu werden.

Entfernen Sie entweder die "Autorelease", in der Sie eine Zuweisung für die Schaltfläche vornehmen, oder entfernen Sie die [button release] -Anweisung, damit der Code ohne Fehler und Ausnahmen kompiliert werden kann.

Wenn ein Objekt für die automatische Freigabe markiert ist, entspricht das Aufrufen einer Freigabe dem Aufrufen einer Freigabe für eine nicht zugeordnete Instanz, daher der Fehler.

Verwandte Themen