我无法将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
发送到另一个类的方法,然后重新加载整个表。现在确定我为什么会收到此错误。
建议,想法?
答案 0 :(得分:4)
你走在正确的轨道上,但你会发现两个主要问题:
头文件中的声明与实现文件中的实现不匹配。方法的基本格式为- (ReturnType)methodName:(<ParamType>)paramName;
在标题中,您定义的方法不带参数,并返回NSInteger *
。在实现文件中,您定义的方法采用NSInteger **
并且不返回任何内容(void
)。实现文件中的版本更接近您想要的版本。
NSInteger不是类,而是简单类型。您不必像对象一样通过引用传递它,因此您只需将参数指定为NSInteger
而不是NSInteger *
或NSInteger **
这会在标题中留下这段代码:
- (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;
的typedeftypedef long NSInteger;