2014-11-19 1 views
0

내 앱에서 [테이블보기] [1] (으)로 팝업됩니다.xcode로 컴파일 할 때 cellForRowAtIndexPath가 호출되지 않습니다. 6.1

Xcode 5.1로 컴파일하면 모든 것이 정상적으로 작동하지만 Xcode 6.1로 컴파일 된 동일한 코드는 [cellForRowAtIndexPath] [012]을 호출하지 못했습니다.

다른 대리자가 호출됩니다.

한 intersting 점은 self.tableView.rowHeight; -1을 반환 내가 자기에게 위임 및 데이터 소스를 설정 명시 적으로 시도

입니다하지만 클래스는 다음 코드에 의해 호출된다

하지 차이를 만든다;

`-(IBAction)selectLanguage:(id)sender 
{ 
    ATLMLanguagePopoverTableViewController *pvc = [[ATLMLanguagePopoverTableViewController alloc] initWithNibName:nil bundle:nil]; 
    pvc.target = self; 
    pvc.action = @selector(popoverDidSelectItem:); 
    pvc.items = [[[ATLMLibraryManager getManager]libraryDefaults]getAvailableLanguageNames]; 
    _myPopoverController.contentViewController = pvc; 
    [_myPopoverController setPopoverContentSize:[pvc popoverContentSize]]; 
    [_myPopoverController presentPopoverFromBarButtonItem:(UIBarButtonItem *)sender permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 
} 
`

듣고는 클래스 내 자신의 질문에 대답 OK


/

/LanguagePopoverTableViewController.m // SalesAid // // Created by phuang on 1/16/13. // Copyright (c) 2013 Align Technology. All rights reserved. // #import "ATLMLanguagePopoverTableViewController.h" #import "ATLMLocalizationManager.h" #import "ATLMUtils.h" @interface ATLMLanguagePopoverTableViewController() @end @implementation ATLMLanguagePopoverTableViewController @synthesize items, selectedItem, target, action; - (id)initWithStyle:(UITableViewStyle)style { self = [super initWithStyle:style]; if (self) { selectedItem = -1; target = nil; action = NULL; } return self; } -(void) resetLocalization { [self.tableView reloadData]; } - (void)didReceiveMemoryWarning { // Releases the view if it doesn't have a superview. [super didReceiveMemoryWarning]; // Release any cached data, images, etc that aren't in use. } - (void)setItems:(NSArray *)newItems { items = [newItems copy]; dispatch_async(dispatch_get_main_queue(), ^{ [self.tableView reloadData]; }); } #pragma mark - View lifecycle - (void)viewDidLoad { [super viewDidLoad]; } - (void)viewDidUnload { [super viewDidUnload]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; selectedItem=0; NSString *curLang = (NSString *) [[ATLMLocalizationManager getManager]getCurrentLanguage] ; for(int i = 0; i < items.count ; i++){ if([curLang isEqualToString:(NSString *)[items objectAtIndex:i]]){ selectedItem = i; break; } } NSIndexPath *i = [NSIndexPath indexPathForRow:selectedItem inSection:0]; [self.tableView selectRowAtIndexPath:i animated:NO scrollPosition:UITableViewScrollPositionNone]; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; } - (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return YES; } - (CGSize)popoverContentSize { NSInteger rowHeight = self.tableView.rowHeight; UITableView *tv = self.tableView; rowHeight = 50; return CGSizeMake(100, [items count] * rowHeight); } #pragma mark - Table view data source - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [items count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; } cell.textLabel.font = [UIFont systemFontOfSize:14]; UIView *myBackView = [[UIView alloc] initWithFrame:cell.frame]; myBackView.backgroundColor = [ATLMUtils getAlignBlue]; cell.selectedBackgroundView = myBackView; [cell setSelectedBackgroundView: myBackView ]; NSString *textLabelKey = [items objectAtIndex:[indexPath indexAtPosition:1]]; cell.textLabel.text = ATLMLocalizedString(textLabelKey, nil); cell.textLabel.textAlignment = NSTextAlignmentCenter; return cell; } #pragma mark - Table view delegate - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { selectedItem = indexPath.row; if (target != nil && action != NULL) { [target performSelector:action withObject:self]; } } @end

`

+0

다른 'dataSource' 메소드가 호출 되나요 ('numberOfSections' 및'numberOfRowsInSection')? – rmaddy

+0

아니 코드, 아니 디버그 정보, 아무것도, downvotes 많이 기대 - 아마도 닫는 투표 –

+0

@ maddy 예, 다른 대리자 메서드가 예상대로 호출됩니다. – Julian

답변

0

의 정의입니다;

기본적으로 코드는 init 메서드가 호출 된 후 모델을보기 컨트롤러에 추가합니다. 그러나 모델이 추가되기 전에 스레드 모델이 조금 변경되었고 뷰가 생성되어 모델의 행 수가 0이되는 것 같습니다.

해결 방법은 모델을 init 메소드의 일부로 전달하는 것입니다.

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil items:(NSArray *)itemArray 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
     items = [itemArray copy]; 
     selectedItem = -1; 
     target = nil; 
     action = nil; 
    } 
    return self; 
} 
관련 문제