将NSNumber发送到另一个类方法 - 目标C.

时间:2014-04-01 00:02:14

标签: ios objective-c

我无法将NSInteger发送到另一个班级。这就是我在做的事情。

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath];
    NSInteger tag = cell.tag;
    impact* myScript = [[impact alloc] init];
    [myScript startProcess:tag];
}

我在此处向影片的NSInteger方法发送startProcess。问题是当它发送时我得到以下错误:

No visible @interface for 'impact' declares the selector 'startProcess:'

但问题是我正在定义startProcess方法。

以下是impact.h文件:

-(NSInteger *)startProcess;

以下是impact.m文件:

#pragma mark - Table view delegate
- (void)startProcess:(NSInteger **)number {
    [UITableView reloadData];

}

所以回顾一下,我试图将NSInteger发送到另一个类的方法,然后重新加载整个表。现在确定我为什么会收到此错误。

建议,想法?

2 个答案:

答案 0 :(得分:4)

你走在正确的轨道上,但你会发现两个主要问题:

  1. 头文件中的声明与实现文件中的实现不匹配。方法的基本格式为- (ReturnType)methodName:(<ParamType>)paramName;在标题中,您定义的方法不带参数,并返回NSInteger *。在实现文件中,您定义的方法采用NSInteger **并且不返回任何内容(void)。实现文件中的版本更接近您想要的版本。

  2. NSInteger不是类,而是简单类型。您不必像对象一样通过引用传递它,因此您只需将参数指定为NSInteger而不是NSInteger *NSInteger **

  3. 这会在标题中留下这段代码:

    - (void)startProcess:(NSInteger)number;
    

    和实现文件中的代码

    - (void)startProcess:(NSInteger)number {
        [UITableView reloadData];
    }
    

答案 1 :(得分:0)

这里有很多错误,所以我会迭代我能先抓到的那些。

我注意到的第一件事是你对startProcess的定义与你在实现中定义的定义有很大不同。

你的标题声明它应该返回一个指向NSInteger的指针并且不带参数,但你的实现说它应该什么也不返回并且以NSInteger **为参数。

此外,UITableView的reloadData方法不是类方法,它是一个实例方法。 [UITableView reloadData]不起作用,因为UITableView是一个类,而不是一个实例(并且你想要指定你想要刷新哪个tableView吗?)

至于回答这个问题,请在impact.h文件中重新定义您的声明

-(void)startProcess:(NSInteger)tag;

并编辑其受尊重的实现以使用NSInteger。

我不明白为什么你需要一个指向NSInteger的指针。

另外,据我记忆,NSInteger不是NSNumber,这意味着它不是一个Objective-c对象。 NSInteger是&#39; long&#39;

的typedef
typedef long NSInteger;