Вопрос

UITabBarController не поддерживает альбомную ориентацию.Поэтому я использовал подкласс UITabBarContoller (называемый RotatingTabBarController).Его единственная цель — разрешить вращение, возвращая YES на вызов mustAutorotateToInterfaceOrientation.

Проблема в том, что когда вы поворачиваете iPhone в симуляторе, выдается следующая ошибка malloc.

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

Я использую SDK 3.0 с Xcode 3.2 на Snow Leopard.Я установил точку останова в malloc_error_break, но не могу отследить ее до своего кода. Могу ли я что-то сделать, чтобы эта ошибка исчезла?

Вот класс RotatingTabBarController:

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

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

Обновлять:

Я попробовал то же самое с категорией.Но выдает ту же ошибку 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

обратная трассировка

[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) 
Это было полезно?

Решение

Это ошибка в iPhone SDK 3.0.Это исправлено в iPhone SDK 3.1.

Другие советы

Создание подкласса UITabBarController не является рекомендуемым способом ротации интерфейса.Фактически в документации Apple строго указано, что нельзя создавать подклассы UITabBarController или UINavigationController.В нем также говорится, что для того, чтобы UITabBarController поддерживал авторотацию, все контроллеры, «управляемые» им, должны поддерживать эту ориентацию (т.е. в данном случае альбомную).

Эта ошибка выглядит так, будто что-то либо выпускается без alloc/init, либо выпускается дважды, и это не похоже на ошибку в вашем подклассе или коде.

Мне нравится категориальный подход Кевлара к решению вашей проблемы, он креативный, простой и должен подойти вам.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top