我应该修复Xcode 5的“语义问题:未声明的select器”吗?

我试图用Xcode5升级我的应用程序,但在第三方库(即MagicalRecord)中遇到了一些“语义问题”。 “解决”这个最快捷的方法可能是使用:

#pragma GCC diagnostic ignored "-Wundeclared-selector" 

(来自: 如何摆脱“未声明的select器”警告 )

编译器指令,但我的直觉感觉说这不是做这件事的恰当方法。 带有上述错误的小代码示例:

 + (NSEntityDescription *) MR_entityDescriptionInContext:(NSManagedObjectContext *)context { if ([self respondsToSelector:@selector(entityInManagedObjectContext:)]) { NSEntityDescription *entity = [self performSelector:@selector(entityInManagedObjectContext:) withObject:context]; return entity; } else { NSString *entityName = [self MR_entityName]; return [NSEntityDescription entityForName:entityName inManagedObjectContext:context]; } } 

entityInManagedObjectContext:方法没有在任何地方定义。

任何build议如何最好地解决这些types的错误,在此先感谢?!

你只需要声明一个包含select器的类或协议。 例如:

 // DeliveryTimeComparison.h #import <Foundation/Foundation.h> @protocol DeliveryTimeComparison <NSObject> - (void)compareByDeliveryTime:(id)otherTime; @end 

然后,只需在您打算使用@selector(compareByDeliveryTime:)任何类中input#import "DeliveryTimeComparison.h" @selector(compareByDeliveryTime:)

或者,也可以为包含“compareByDeliveryTime:”方法的任何对象导入类标题。

是的你应该。

而不是这样做:

 [self.searchResults sortUsingSelector:@selector(compareByDeliveryTime:)]; 

你应该做这个:

 SEL compareByDeliveryTimeSelector = sel_registerName("compareByDeliveryTime:"); [self.searchResults sortUsingSelector:compareByDeliveryTimeSelector]; 

Xcode 5默认打开了这个function。 要closures它,请在“Apple LLVM 5.0 – 警告 – 目标C” – >“未声明的select器”下将目标设置为“否”。 这应该照顾它。

MagicalRecord中的这些select器警告是为了与mogenerator生成的Core Data类兼容。 除了使用mogenerator并且可能导入其中一个实体之外,除了已经回答的内容之外,你实际上可以做的事情并不多。

另一个选项当然是用忽略块来包围这个代码

 #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wundeclared-selector" 

并在最后

 #pragma clang diagnostic pop 
Interesting Posts