Pregunta

El UITabBarController no permite la orientación horizontal. Por lo que utiliza una subclase de UITabBarContoller (llamado RotatingTabBarController). Su único propósito es permitir la rotación mediante la devolución de llamada SÍ a shouldAutorotateToInterfaceOrientation.

El problema es que cuando se gira el iPhone en el simulador da el siguiente error malloc.

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

Estoy utilizando el SDK 3.0 con Xcode 3.2 en Snow Leopard. Me puse un punto de interrupción en malloc_error_break pero no puedo rastrear de nuevo a mi código. ¿Hay algo que pueda hacer para que este error se vaya?

Esta es la clase RotatingTabBarController:

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

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

Actualización:

He intentado lo mismo con una categoría. Pero da el mismo error malloc.

// 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

Backtrace

[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) 
¿Fue útil?

Solución

Esto es un error en iPhone SDK 3.0. Se fija en el iPhone SDK 3.1

Otros consejos

La subclasificación UITabBarController no es un método recomendado para obtener la rotación de interfaz. De hecho la documentación de Apple dice que estrictamente no sea subclase UITabBarController o UINavigationController. También dice que para que UITabBarController para apoyar la auto rotación, todos los controladores 'gestionado' por ella debe admitir esta orientación (horizontal es decir en este caso).

Ese error se ve como algo está bien de ser liberado sin un alloc / init, o que está siendo liberado doble, no se ve como un error en su sub-classing o código.

Me gusta el enfoque de la categoría de Kevlar para resolver su problema, que es creativo, simple, y debe trabajar para usted.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top