5 Stimmen

Querformatige Ausrichtung für UITabBarController?

Der UITabBarController erlaubt keine Ausrichtung im Querformat. Also habe ich eine Unterklasse von UITabBarContoller (genannt RotatingTabBarController) verwendet. Sein einziger Zweck ist es, Rotation durch Rückgabe von YES zu shouldAutorotateToInterfaceOrientation Aufruf zu ermöglichen.

Das Problem ist, dass beim Drehen des iPhones im Simulator der folgende malloc-Fehler auftritt.

malloc: *** error for object 0x3888000: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug

Ich verwende 3.0 SDK mit Xcode 3.2 auf Snow Leopard. Ich habe einen Haltepunkt in malloc_error_break gesetzt, aber ich kann ihn nicht zu meinem Code zurückverfolgen. Gibt es etwas, was ich tun kann, um diesen Fehler zu beheben?

Hier ist die RotatingTabBarController-Klasse:

#import <UIKit/UIKit.h>
@interface RotatingTabBarController : UITabBarController {
}
@end 

@implementation RotatingTabBarController
-(BOOL)shouldAutorotateToInterfaceOrientation:UIInterfaceOrientation)interfaceOrientation {
    return YES;
}
@end

Aktualisierung:

Ich habe dasselbe mit einer Kategorie versucht. Aber es gibt den gleichen malloc Fehler.

// UITabBarController+Rotation.h
@interface UITabBarController (rotation)
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation;
@end

// UITabBarController+Rotation.m
#import "UITabBarController+Rotation.h"

@implementation UITabBarController (rotation)
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
   return YES;
}
@end

Rückverfolgung

[Session started at 2009-09-05 12:13:19 -0400.]
Untitled(992,0xa06d9500) malloc: *** error for object 0x2024000: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Untitled(992,0xa06d9500) malloc: *** error for object 0x2014000: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug

[Session started at 2009-09-05 12:13:27 -0400.]
GNU gdb 6.3.50-20050815 (Apple version gdb-1344) (Fri Jul  3 01:19:56 UTC 2009)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin".Attaching to process 992.
sharedlibrary apply-load-rules all
(gdb) bt
#0  0x951908fa in mach_msg_trap ()
#1  0x95191067 in mach_msg ()
#2  0x30244d62 in CFRunLoopRunSpecific ()
#3  0x30244628 in CFRunLoopRunInMode ()
#4  0x32044c31 in GSEventRunModal ()
#5  0x32044cf6 in GSEventRun ()
#6  0x309021ee in UIApplicationMain ()
#7  0x00002608 in main (argc=1, argv=0xbfffef94) at /Users/vishwas/Desktop/Untitled/main.m:13
(gdb)

8voto

Vic Punkte 935

Dies ist ein Fehler im iPhone SDK 3.0. Er ist im iPhone SDK 3.1 behoben.

8voto

maciejs Punkte 368

Die Unterklassifizierung von UITabBarController ist kein empfohlener Weg, um eine Schnittstellenrotation zu erhalten. In der Tat Apples Dokumentation sagt streng nicht zu subclass entweder UITabBarController oder UINavigationController. Es sagt auch, dass, um für UITabBarController Autorotation zu unterstützen, alle Controller "verwaltet" von ihm muss diese Ausrichtung (dh Querformat in diesem Fall) unterstützen.

0voto

slf Punkte 22309

Dieser Fehler sieht aus wie etwas entweder ohne ein alloc/init freigegeben wird, oder es ist doppelt freigegeben, sieht nicht wie ein Fehler in Ihrem sub-Classing oder Code.

Mir gefällt der Ansatz von Kevlar zur Lösung Ihres Problems, er ist kreativ, einfach und sollte für Sie funktionieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X