2014-06-07 2 views
0

보기 컨트롤러 내에 UITableView 설정이있어 함수에서 반환되는 JSON 데이터로 채 웁니다. 나는 MatchCenterViewController, 응용 프로그램 충돌을로드하고 나는 다음과 같은 오류가 나타나면 단순히 말해, 나는이 오류 코드가 참조 UIView tableView:numberOfRowsInSection 확인했습니다numberOfRowsInSection이 인식 할 수없는 선택기 충돌을 일으키고 있습니다.

2014-06-07 15:56:23.651 Parse+Storyboard[6848:607] -[UIView tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0xaa29730 
2014-06-07 15:56:23.825 Parse+Storyboard[6848:607] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0xaa29730' 
*** First throw call stack: 
(
    0 CoreFoundation      0x02a8c1e4 __exceptionPreprocess + 180 
    1 libobjc.A.dylib      0x0264a8e5 objc_exception_throw + 44 
    2 CoreFoundation      0x02b29243 -[NSObject(NSObject) doesNotRecognizeSelector:] + 275 
    3 CoreFoundation      0x02a7c50b ___forwarding___ + 1019 
    4 CoreFoundation      0x02a7c0ee _CF_forwarding_prep_0 + 14 
    5 UIKit        0x0156f94c -[UISectionRowData refreshWithSection:tableView:tableViewRowData:] + 2510 
    6 UIKit        0x0157323d -[UITableViewRowData numberOfRows] + 98 
    7 UIKit        0x013f0df2 -[UITableView noteNumberOfRowsChanged] + 120 
    8 UIKit        0x013f07a5 -[UITableView reloadData] + 814 
    9 UIKit        0x013f43b3 -[UITableView _reloadDataIfNeeded] + 65 
    10 UIKit        0x013f95f4 -[UITableView layoutSubviews] + 36 
    11 UIKit        0x01379964 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 355 
    12 libobjc.A.dylib      0x0265c82b -[NSObject performSelector:withObject:] + 70 
    13 QuartzCore       0x0064f45a -[CALayer layoutSublayers] + 148 
    14 QuartzCore       0x00643244 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 380 
    15 QuartzCore       0x006430b0 _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 26 
    16 QuartzCore       0x005a97fa _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 294 
    17 QuartzCore       0x005aab85 _ZN2CA11Transaction6commitEv + 393 
    18 QuartzCore       0x006685b0 +[CATransaction flush] + 52 
    19 UIKit        0x013089bb _UIApplicationHandleEventQueue + 13095 
    20 CoreFoundation      0x02a1577f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15 
    21 CoreFoundation      0x02a1510b __CFRunLoopDoSources0 + 235 
    22 CoreFoundation      0x02a321ae __CFRunLoopRun + 910 
    23 CoreFoundation      0x02a319d3 CFRunLoopRunSpecific + 467 
    24 CoreFoundation      0x02a317eb CFRunLoopRunInMode + 123 
    25 GraphicsServices     0x02ce95ee GSEventRunModal + 192 
    26 GraphicsServices     0x02ce942b GSEventRun + 104 
    27 UIKit        0x0130af9b UIApplicationMain + 1225 
    28 Parse+Storyboard     0x00002cbd main + 141 
    29 libdyld.dylib      0x038e56d9 start + 1 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 

을, 나는이 원인이 될 수 무엇을 볼 수 없습니다 그것은 3 개의 행이 있다는 것입니다. 코드와 스크린 샷은 다음과 같습니다.

MatchCenterViewController.m :

#import "MatchCenterViewController.h" 
#import <UIKit/UIKit.h> 

@interface MatchCenterViewController() <UITableViewDataSource, UITableViewDelegate> 
@property (weak, nonatomic) IBOutlet UITableView *matchCenter; 
@end 

@implementation MatchCenterViewController 



- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 






- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return 3; 
} 



- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 


    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

    NSDictionary *matchCenterDictionary= [self.matchCenterArray objectAtIndex:indexPath.row]; 

    cell.textLabel.text = [matchCenterDictionary objectForKey:@"Title"];// title of the first object 

    // if([matchCenterDictionary objectForKey:@"Price"] != NULL) 
    // { 
    //  cell.detailTextLabel.text = [NSString stringWithFormat:@"$%@",[matchCenterDictionary objectForKey:@"Price"]]; 
    // } 

    return cell; 


} 





- (void)viewDidLoad 
{ 

    [super viewDidLoad]; 

self.matchCenterArray = [[NSArray alloc] init]; 

    //perform search with criteria just submitted 
    [PFCloud callFunctionInBackground:@"MatchCenterTest" 
         withParameters:@{ 
             @"test": @"Hi", 
             } 
           block:^(NSDictionary *result, NSError *error) { 




            if (!error) { 
             self.matchCenterArray = [result objectForKey:@"Top 3"]; 



             dispatch_async(dispatch_get_main_queue(), ^{ 
              [_matchCenter reloadData]; 
             }); 



             NSLog(@"Test Result: '%@'", result); 

            } 
           }]; 


} 

- (void)viewDidAppear:(BOOL)animated 
{ 


    [PFCloud callFunctionInBackground:@"MatchCenterTest" 
         withParameters:@{ 
             @"test": @"Hi", 
             } 
           block:^(NSDictionary *result, NSError *error) { 

            if (!error) { 
             self.matchCenterArray = [result objectForKey:@"Top 3"]; 


             dispatch_async(dispatch_get_main_queue(), ^{ 
              [_matchCenter reloadData]; 
             }); 


             NSLog(@"Test Result: '%@'", result); 
            } 
           }]; 



} 




- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 




/* 
#pragma mark - Navigation 

// In a storyboard-based application, you will often want to do a little preparation before navigation 
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    // Get the new view controller using [segue destinationViewController]. 
    // Pass the selected object to the new view controller. 
} 
*/ 

@end 

enter image description here

enter image description here

답변

3

당신은 인터페이스 빌더에서 UIView 아니라 당신의 MatchCenterViewController에있는 tableView의 UITableViewDelegateUITableViewDataSource을 설정하고 있습니다.

UIViewUITableViewDataSource을 구현하지 않으므로 인식 할 수없는 선택기 오류가 발생합니다.

+0

아하이 봐요. 나는 이것을 어떻게 바꿀 수 있는지 약간 혼란 스럽다. 이것은 스토리 보드 나 구현 파일에서 변경 될 수 있습니까? 스토리 보드 설정에서 테이블 뷰의 클래스를 'MatchCenterViewController'로 변경하려고 시도했지만 'UITableView'로 되돌릴 수 있습니다. – Ghobs

0

delegatedataSource을 위임 메서드를 구현하는 클래스로 설정해야합니다. 귀하의 경우 귀하의 MatchCenterViewController입니다.

또 다른 사실은 PFCloud 메서드를 viewDidLoadviewDidAppear 모두 호출하는 것입니다. 한 곳에서 만 수행해야합니다. 한 곳에서 실행하고 싶으면 viewDidLoad에 추가하고 view이 표시 될 때마다 실행하려면 원하면 viewDidAppear에 추가하십시오.

그리고 또 다른 작은 일 : 당신은 (파일)에서 위에서 아래로 순서대로 방법이 있어야합니다

  1. 의 dealloc
  2. 초기화 방법 (init, initWithFrame 등 (있는 경우) .)
  3. 다른 방법들, 관련된 것들은 그룹화되어, 보통 #pragma mark으로 분리됩니다.
관련 문제