semantico poema ejemplo cancion campo analisis ios selector semantics xcode5

ios - poema - ¿Debo arreglar Xcode 5 ''Problema semántico: selector no declarado''?



campo semantico de cancion (4)

Estas advertencias de selector en MagicalRecord son compatibles con las clases de datos principales generadas por mogenerator. Además de usar mogenerator y tal vez importar una de las entidades, realmente no hay mucho que puedas hacer además de lo que ya fue respondido.

Otra opción, por supuesto, es rodear ese código específicamente con bloques de ignorar

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

Y al final

#pragma clang diagnostic pop

Estoy tratando de actualizar mi aplicación con Xcode5 pero encontré una cantidad de ''Problemas semánticos'' en una biblioteca de terceros (siendo MagicalRecord). La forma más rápida de "corregir" esto podría ser mediante:

#pragma GCC diagnostic ignored "-Wundeclared-selector"

(de: Cómo deshacerse de la advertencia del "selector no declarado" )

directiva del compilador, pero mi intuición dice que esta no es la forma adecuada de hacerlo. Una pequeña muestra de código con el error anterior:

+ (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]; } }

donde el método entityInManagedObjectContext: no está definido en ningún lugar.

¿Alguna sugerencia sobre cómo solucionar mejor este tipo de errores, gracias de antemano?


Si deberías.

en lugar de hacer esto:

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

usted debe hacer esto:

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


Solo necesita declarar una clase o protocolo que contiene el selector. Por ejemplo:

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

Y luego simplemente #import "DeliveryTimeComparison.h" en cualquier clase donde @selector(compareByDeliveryTime:) usar @selector(compareByDeliveryTime:) .

O bien, simplemente importe el encabezado de clase para cualquier objeto que contenga un método "compareByDeliveryTime:".


Xcode 5 activó esto de manera predeterminada. Para desactivarlo, vaya a "Configuración de compilación" para su objetivo en "Apple LLVM 5.0 - Advertencias - Objetivo C" -> "Selector no declarado" configúrelo en "NO". Esto debería encargarse de eso.