사용자 정의 탭 막대를 만든 iOS 응용 프로그램을 빌드하려고합니다. UIView에서 같은보기 컨트롤러에서 UIView의 내용을로드하는 버튼이 다릅니다.스크롤 할 때 응용 프로그램이 충돌 함 - EXC_BAD_ACCESS
일부보기에서는 UITableView를 삽입했습니다. 모든 셀이 올바르게 표가로드됩니다. 단, 스크롤 할 때 EXC_BAD_ACCESS 오류가 발생하는 것을 제외하면 제대로 인쇄됩니다. 나는 더 많은 정보를 얻기 위해 좀비를 활성화 나는 다음과 같은 메시지가 얻을 : 는 "FirstTabBarController가 responsToSelector] :. 메시지 할당이 해제 된 경우 0x75d79d0
로 전송 나는이 문제를 해결하는 방법을 알아낼 수 없습니다를 여기
조금이다 하여 응용 프로그램의 구조에 대한 자세한 :.H 파일 :
#import <UIKit/UIKit.h>
@interface MainViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIView *placeholderView;
@property (weak, nonatomic) UIViewController *currentViewController;
@end
MainViewController에서 , 나는 TabBar의를 복제 할 내용을로드하기 위해 다른 UIViewControllers에서 데이터를 가져옵니다 UIView의이
#import <UIKit/UIKit.h>
#import "DataController.h"
@interface FirstTabBarViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {
IBOutlet UITableView* tabBarTable;
}
@property (strong, nonatomic) IBOutlet UIView *mainView;
@property (strong, nonatomic) IBOutlet UITableView *tabBarTable;
@property (nonatomic, strong) DataController *messageDataController;
@end
하는 .m 파일 :
#import "FirstTabBarViewController.h"
#import "DataController.h"
@interface FirstTabBarViewController()
@end
@implementation FirstTabBarViewController
@synthesize tabBarTable=_tabBarTable;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)awakeFromNib
{
[super awakeFromNib];
self.messageDataController=[[DataController alloc] init];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return [self.messageDataController countOfList];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"mainCell";
UITableViewCell *cell = [tableView
dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil){
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
};
NSString *expenseAtIndex = [self.messageDataController
objectInListAtIndex:indexPath.row];
[[cell textLabel] setText:expenseAtIndex];
return cell;
}
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
// Return NO if you do not want the specified item to be editable.
return NO;
}
@end
DataController 클래스는 문자열을 포함하는 간단한있는 NSMutableArray가 내 FirstTabBarViewController을 SEGUE 사용자 정의로로드 할 때 0
, 나는 나던 스크롤이 표를 얻을. 이 같은 사용자 정의 SEGUE의 역할 : 당신의 도움에 대한
#import "customTabBarSegue.h"
#import "MainViewController.h"
@implementation customTabBarSegue
-(void) perform {
MainViewController *src= (MainViewController *) [self sourceViewController];
UIViewController *dst=(UIViewController *)[self destinationViewController];
for (UIView *view in src.placeholderView.subviews){
[view removeFromSuperview];
}
src.currentViewController =dst;
[src.placeholderView addSubview:dst.view];
}
@end
많은 감사, 그것은 대단히 감사합니다. 코드에서
안녕하세요, 도움을 주셔서 감사합니다. 불행히도 그것은 작동하지 않았다. initWithString 메서드에서 @ "@"를 제거해야했습니다. 그렇지 않으면 컴파일되지 않습니다. 릴리스 기능을 사용할 수 없습니다 : "릴리스를 사용할 수 없습니다", "ARC는 명시 적으로"릴리스 "" – Spearfisher
예 ... 메시지 전송을 금지합니다. 그러나 프로젝트에서 ARC를 사용했는지 여부를 알지 못했습니다. :-) – hpp
저는 ARC에 매우 익숙합니다 :) 이 작업을 수행하는 다른 빠른 수정본이 있습니까? – Spearfisher