【问题标题】:Objective C Semantic Issue With NSIntegerNSInteger 的 Objective C 语义问题
【发布时间】:2014-04-05 18:59:16
【问题描述】:

我的 switch 语句的第一行出现错误,其中包含“selected”一词。谁能告诉我问题是什么?我一直在试图弄清楚,但还没有成功。如果有人能指出我正确的方向,将不胜感激。

SecondTableViewController.m

#import "SecondTableViewController.h"
#import "RootTableViewController.h"
#import "ThirdTableViewController.m"

@interface SecondTableViewController ()

@end

@implementation SecondTableViewController
{
NSArray *dogs;
NSArray *cats;
NSArray *frogs;
NSArray *gnats;

NSArray *dogSpecs;
NSArray *catSpecs;
NSArray *frogSpecs;
NSArray *gnatSpecs;

NSMutableArray *arrayItems;
}

- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
    // Custom initialization
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];
arrayItems = [[NSMutableArray alloc]init];

dogSpecs = [NSArray arrayWithObjects:@"Yellow", @"Black", @"Mean", @"Fast", @"Ugly", nil];
catSpecs = [NSArray arrayWithObjects:@"Smells", @"Hairy", @"Biter", @"Long", nil];
frogSpecs = [NSArray arrayWithObjects:@"Green", @"Yellow", @"Red", nil];
gnatSpecs = [NSArray arrayWithObjects:@"Crash", @"Annoying", @"Sad", nil];

[self SelectedMasterItem:self.selectedIndex];

// Uncomment the following line to preserve selection between presentations.
// self.clearsSelectionOnViewWillAppear = NO;

// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
}

-(void)SelectedMasterItem:(NSInteger *)selected
{
[arrayItems removeAllObjects];

switch (selected)
{
    case 0:
        arrayItems = [dogSpecs mutableCopy];
        break;

    case 1:
        arrayItems = [catSpecs mutableCopy];
        break;

    case 2:
        arrayItems = [frogSpecs mutableCopy];
        break;

    case 3:
        arrayItems = [gnatSpecs mutableCopy];
        break;

    default:
        break;
}
[self.tableView reloadData];
}

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

#pragma mark - Table view data source

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)indexPath
{
return arrayItems.count;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//makes table indentifier
static NSString *simpleTableIdentifier = @"Animal3Cell";

//creates the cell
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

if(!cell)
{
    cell = [[UITableViewCell alloc] initWithStyle:(UITableViewCellStyleDefault)reuseIdentifier:simpleTableIdentifier];
}
cell.textLabel.text =arrayItems[indexPath.row];
return cell;
}

@end

SecondTableViewController.h

#import <UIKit/UIKit.h>

@interface SecondTableViewController : UITableViewController

@property(nonatomic, strong) NSString *animalName;

@property (nonatomic) NSInteger *selectedIndex;

-(void)SelectedMasterItem:(NSInteger *)selected;

@end

错误

SecondTableViewController.m:64:5: Statement requires expression of integer type ('NSInteger *' (aka 'int *') invalid)

谢谢

【问题讨论】:

  • 不要使用指针,所以像这样NSInteger selectedIndex;

标签: objective-c uitableview switch-statement


【解决方案1】:

NSInteger 不是对象,因此不应将其定义为指针。您现在在 switch 语句中使用selected。由于您已将 NSInterger 定义为指针,因此编译器会抱怨您不允许在 switch 语句中使用它。

NSInteger selectedIndex;

【讨论】:

    【解决方案2】:

    这里唯一的NSInteger *(类型定义为int *)在.m 的最后一个方法上。这应该改为

    -(void)SelectedMasterItem:(NSInteger)selected;
    

    【讨论】:

    • 这个错误是什么意思? “clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)”
    • @javaGeek 这意味着你被水洗了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多