Jeśli oświadczam i niekompletnie wdrożyć mój własny protokół stosując następujący kod w Xcode:Dlaczego Xcode 4 nie wyświetla ostrzeżenia o mojej niepełnej implementacji protokołu UITableViewDataSource?
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
Następnie Xcode generuje ostrzeżenie na linii SomeImplementor.h @implementation
, który brzmi następująco:
Niepełna realizacja.
Metoda "someRequiredMethod" w protokole nie zaimplementowana.
Jednak gdybym niekompletnie wdrożenia protokołu z UITableView.h UITableViewDataSource
z następującego kodu ...
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
... potem Xcode jest w porządku z nim, a nie wyświetla ostrzeżenie w dowolnym miejscu, choć wyraźnie nie zostały wdrożone następujące metody z protokołem 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;
Dlaczego? Nie widzę żadnego powodu, aby te dwa przypadki traktować inaczej. (A ja chcę moje ostrzeżenia!)
@MarkAmery Bardzo interesujące. Widzę te same wyniki. – rmaddy
To pytanie jest duplikatem http://stackoverflow.com/questions/14038381/compile-warnings-about-missing-required-protocol-methods-not-appearing –
@Jai: Ale zauważ, że to pytanie nie ma akceptowanej odpowiedzi, a to pytanie dodaje więcej cennych informacji. Więc polecam ** NIE **, aby zamknąć jako duplikat. –