来自不同类的对象的调用方法

时间:2017-08-14 20:57:48

标签: ios objective-c uitableview object

我从2009年开始继承了一个iOS应用程序。我目前正在为它创建一个新的UI。在其中一个视图控制器中,我有一个UITableView。

在旧版本的应用程序中,一些必需的表视图方法实现如下:

#pragma mark -
#pragma mark Table View Methods


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{
    id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchedResultsController sections] objectAtIndex:section];
    return [sectionInfo numberOfObjects];
}

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    static NSString *CellIdentifier = @"SpeciesCell";

    SpeciesCell* speciesCell = (SpeciesCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (!speciesCell) 
    {
        speciesCell = [[[SpeciesCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        speciesCell.frame = CGRectMake(0.0, 0.0, 320.0, ROW_HEIGHT);
    }

    [speciesCell setDrawShortSeparator];

    Species *theSpecies = [fetchedResultsController objectAtIndexPath:indexPath];

    [speciesCell setSpecies:theSpecies usingImageType:currentImageType sortBy:sortBySegmentedControl.selectedSegmentIndex];

    return speciesCell;
}

(以上代码适用于应用的当前用户界面。)

我尝试将cellForRowAtIndexPath方法放在我的新视图控制器中。不幸的是,我一直在Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableViewCell setDrawShortSeparator]: unrecognized selector sent to instance。这个错误当然意味着我是一个不响应该方法的对象的方法。

#import "SecondViewController.h"
#import "Species.h"
#import "SpeciesTableViewCell.h"
#import "SpeciesCell.h"
/*#import "HomeViewController.h"
#import "BrowseHelpViewController.h"
#import "Species.h"
*/

@interface SecondViewController () <UITableViewDataSource, UITableViewDelegate>{

}

@end

@implementation SecondViewController

@synthesize fetchedResultsController, managedObjectContext;


#pragma mark -
#pragma mark View lifecycle


- (void)viewDidLoad {


    [super viewDidLoad];

    UIImage *btnImage1 = [UIImage imageNamed:@"Pear.png"];
    _left_button.tag = 1;
    [_left_button setImage:btnImage1 forState:UIControlStateNormal];
    [_search_bar sizeToFit];
    [self fetchResultsUsingSegmentedControlIndex];

}
/* other methods */

#pragma mark - UITableView DataSource Methods

- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchedResultsController sections] objectAtIndex:section];
    //NSLog(@"number of rows %lu", (unsigned long)[sectionInfo numberOfObjects]);

    return [sectionInfo numberOfObjects];

}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return [[fetchedResultsController sections] count];
}
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"SpeciesCell";

    SpeciesCell* speciesCell = (SpeciesCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (!speciesCell)
    {
        speciesCell = [[[SpeciesCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        speciesCell.frame = CGRectMake(0.0, 0.0, 320.0, ROW_HEIGHT);
    }

    [speciesCell setDrawShortSeparator];

    Species *theSpecies = [fetchedResultsController objectAtIndexPath:indexPath];

    [speciesCell setSpecies:theSpecies usingImageType:currentImageType sortBy:sortBySegmentedControl.selectedSegmentIndex];

    return speciesCell;
} 
@end

但是,我没有在UITableViewCell对象上调用setDrawShortSeparator方法 - 我在speciesCell上调用它,SpeciesCell类是SpeciesCell.h类的对象。在我的ViewController顶部,我导入{% if is_granted('IS_AUTHENTICATED_FULLY') %} // show logout link {% else %} // show register link {% endif %}

我很感激所有见解!谢谢。

1 个答案:

答案 0 :(得分:0)

查找包含该单元格视图的文件,并将其类设置为 SpeciesCell 类。如果你使用任何 IBOutlets ,你也应该连接它们。