为什么Xcode 4不会对我不完整的UITableViewDataSource协议实现发出警告?

时间:2013-07-03 16:32:43

标签: ios objective-c xcode cocoa-touch uitableview

如果我使用Xcode中的以下代码声明并且不完整地实现我自己的协议:

  

SomeProtocol.h:

@protocol SomeProtocol <NSObject>

@required

-(void)someRequiredMethod;

@end
  

SomeImplementor.h:

#import "SomeProtocol.h"

@interface SomeImplementor : NSObject <SomeProtocol>

@end
  

SomeImplementor.m:

#import "SomeImplementor.h"

@implementation SomeImplementor { // I get a warning on this line

}

@end

然后Xcode在SomeImplementor.h的@implementation行发出警告,内容如下:

  

执行不完整。

     

协议中的方法'someRequiredMethod'未实现。

但是,如果我使用以下代码从UITableView.h中不完整地实现UITableViewDataSource协议......

  

SomeClass.h:

@interface SomeClass : NSObject <UITableViewDataSource>

@end
  

SomeClass.m:

#import "SomeClass.h"

@implementation SomeClass  { // I think I should get a warning here, but I don't

}

@end

...然后Xcode很好用,并且不会在任何地方显示警告,即使我显然没有从UITableViewDataSource协议实现以下方法:

@protocol UITableViewDataSource<NSObject>

@required

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;

// Row display. Implementers should *always* try to reuse cells by setting each cell's reuseIdentifier and querying for available reusable cells with dequeueReusableCellWithIdentifier:
// Cell gets various attributes set automatically based on table (separators) and data source (accessory views, editing controls)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

为什么呢?我看不出有任何理由认为这两种情况应该区别对待。 (而且我想要我的警告!)

1 个答案:

答案 0 :(得分:3)

这可能是Xcode 4中的一个错误。

它似乎在Xcode 5中得到修复,它会对你进行适当的警告。