2014-04-01 32 views
1

我無法通過NSInteger發送到另一班級。這是我正在做的。將NSNumber發送給另一個班級方法 - 目標C

- (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發送到另一個類的方法和比重新加載整個桌子。現在確定爲什麼我得到這個錯誤。

建議,想法?

回答

4

你是在正確的軌道上,但你會發現兩個主要問題:

  1. 在頭文件中的聲明不符合在實現文件的執行情況。方法的基本格式是- (ReturnType)methodName:(<ParamType>)paramName;在標題中,您定義了一個不帶參數的方法,並返回一個NSInteger *。在實現文件中,您正在定義採用NSInteger **且不返回任何內容的方法(void)。實現文件中的版本更接近你想要的版本。

  2. NSInteger不是一個類,而是一個簡單類型。你不必按引用傳遞你喜歡做的對象,所以你可以指定參數作爲NSInteger而不是NSInteger *NSInteger **

這使得你這個代碼在標題:

- (void)startProcess:(NSInteger)number; 

這個代碼在實現文件

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

有很多錯在這裏,所以我會通過那些我能貓迭代首先。

我注意到的第一件事情是,您對startProcess的定義與您在實現中定義的定義截然不同。

你的頭文件聲明它應該返回一個指向NSInteger的指針並且不帶任何參數,但是你的實現聲明它不應該返回任何內容並以NSInteger **作爲參數。

此外,UITableView的reloadData方法不是類方法,它是一種實例方法。 [UITableView reloadData]不起作用,因爲UITableView是一個類,而不是一個實例(你想指定你想刷新哪個tableView不是嗎?)

至於回答這個問題,重新定義你的聲明在impact.h文件是

-(void)startProcess:(NSInteger)tag; 

和編輯它推崇的方案中使用一個NSInteger爲好。

我不明白你爲什麼需要一個指向NSInteger的指針。

此外,據我記憶,NSInteger不是一個NSNumber,這意味着它不是一個Objective-c對象。 NSInteger是一個'長'的typedef

typedef long NSInteger; 
相關問題