Estoy tratando de deshacerme de algunas de estas advertencias de mi aplicación de iPhone. El que más obtengo es cuando tengo una función vacía y la llamo usando [self myFunction] ;. La advertencia está en la línea donde llamo a la función y dice: "Método '-myFunction' no encontrado (el tipo de retorno está predeterminado en 'id')". ¿Qué debo hacer para solucionar esto? GraciasCómo soluciono esta advertencia: "Método no encontrado (tipo de retorno predeterminado en 'id')"
Respuesta
declarar la función en el archivo de cabecera, así:
-(void)myFunction;
o
-(NSString*)myFunction;
-(id)myFunction;
-(NSInteger)myFunction;
-(BOOL)myFunction;
, etc, etc
Esto es más importante que simplemente silenciar el compilador: si el tipo de retorno de una función no es un puntero (id
o anything*
), especialmente cuando no tiene el mismo tamaño, puede obtener t muy extraño y difícil o encontrar errores.
E.g. si una función devuelve una estructura CGRect
, y el compilador asume id
(como dice la advertencia), sucederán cosas realmente extrañas.
Bien, gracias. Además, si no devuelvo nada y solo es una función, ¿utilizo el vacío? – Preston
sí, eso es correcto! – mvds
Estrictamente hablando, el (vacío) no es necesario si no devuelve nada; pero la OMI siempre debe escribirlo para que su código sea comprendido más rápidamente por otros que lo lean. – Dave
Asegúrese de tener - (void) myFunction; declarado en su archivo de encabezado y TAMBIÉN asegúrese de que myFunction no devuelva nada.
Debe definir esa función en su archivo de encabezado (.h) (si debe ser visible para otras clases), o en su archivo de implementación (.m) si es privado para su clase.
Por ejemplo, si se utiliza un método:
-(void)myFunction {
// do something
}
Para una función de "privado", añade esta en la parte superior de su archivo .m; antes de la línea @implementation MyCoolClass
.
@interface MyCoolClass() // <--- no 'category name' hides methods just for this file
-(void)myFunction; // <--- add the method here
-(void)myOtherFunction;
-(void)doSomeCoolThingWithThisString:(NSString *)firstName;
@end
O si desea llamar al método de otros archivos, agregarlo en su archivo .h, dentro de la sección 'interfaz'; después de todas sus propiedades, y antes del @end.
¡Buena suerte!
¿Es esta una buena práctica? – JonWells
Claro. Es común "ocultar" métodos a través de una categoría "privada" si no son parte del contrato de ese objeto con otros. Si ve el método no encontrado advertencia; en general, es una de dos cuestiones: 1) ese método no existe para ese objeto; 2) no incluiste el archivo de encabezado Para aclarar, no sugiero que agregue una declaración para un método que no escribió. – Dave
debe importar el archivo .h que el suyo contiene métodos
Sólo asegúrese de que la función se coloca antes de la persona que llama en su archivo .m !! No sé si esta es la forma correcta de hacer las cosas, pero elimina todas esas advertencias para mí.
Y en el código de ejemplo de apple, no veo que declaren todos los métodos en el archivo h o m. Solo puedo usarlo de inmediato.
Asegúrese de que el objeto que está utilizando tiene esta función declarada también en su archivo de encabezado.
sky.h
:
@interface sky : object {
}
-(void) doSomething:(int)param;
@end
sky.m
:
#import "sky.h"
@implementation sky
-(void) doSomething:(int)param
{
//dosomething usefull
}
tuve un problema similar pop-up para mí y que era porque tenía otro archivo de cabecera con el mismo nombre en un sub-directorio diferente dentro del proyecto que pensé que había borrado Esto finalmente hizo que el compilador pensara que el método no estaba declarado en el encabezado porque estaba buscando en el archivo de encabezado incorrecto.
decido este problema siguiente:
--file: MyObjectController.h--
#import "MyObject.h"
@interface MyObjectController
{
MyObject * obj;
}
-(void) makeSomething;
@end
--file:
#import "MyObjectController.h"
@implementation MyObjectController
-(void) makeSomething {}
@end
--- archivo MyObjectController.mm-- MyObject.h ----
@class MyObjectController;
@interface MyObject
{
MyObjectController * objController;
}
-(void) callMakeSomethingFromObjController;
@end
--- archivo MyObject.mm ----
#import "MyObject.h"
#import "MyObjectController.h" //Add this line!!! And compiller will found makeSomething
@implementation MyObject
-(void) callMakeSomethingFromObjController
{
[objController makeSomething];//warning was here:instance method '-makeSomething' not found (return type defaults to 'id')
}
@end
- 1. Deshabilitar método de instancia no encontrado advertencia
- 2. ADVERTENCIA No encontrado: /favicon.ico
- 3. nula Retorno de método NSInteger tipo de retorno
- 4. Sphinx autodoc da ADVERTENCIA: py: target de referencia de clase no encontrado: tipo advertencia
- 5. ¿Cómo resolver bisonte advertencia "... no tiene tipo declarado"
- 6. predeterminado valor de retorno del método en Java interconecta
- 7. Java - Retorno tipo correcto de método genérico
- 8. ¿Cómo soluciono esta expresión regular de varias líneas en Ruby?
- 9. ¿Cómo soluciono esta nueva advertencia en Xcode 4.3.1: "La escena es inalcanzable debido a la falta de puntos de entrada ..."?
- 10. Cómo explicar esta declaración de método Objective C "- method: parameter;"
- 11. ¿Qué significa esta advertencia?
- 12. ¿Cómo debo evitar esta advertencia de memoria?
- 13. advertencia 10: esta expresión debe tener unidad de tipo
- 14. personalizada Gradle Plugin ID no encontrado
- 15. Método tipo de retorno en clase Dimensión de java.awt
- 16. html5 formulario checkValidity() método no encontrado
- 17. Java: tipo de retorno polimórfico en un método abstracto?
- 18. 'valor no válido encontrado en la advertencia double_scalars', posiblemente numpy
- 19. ¿Cómo tecleo esta advertencia de reflexión?
- 20. Método de Credenciales de Amazon no encontrado
- 21. Método de conjunto de propiedades no encontrado en un tipo derivado
- 22. rake: comando no encontrado
- 23. php - Cómo soluciono este error de tipo de compensación ilegal
- 24. Ctor no permitido tipo de retorno
- 25. Tipo de retorno covariante en Java
- 26. Ejecutando en System.MissingMethodException: Método no encontrado con PrivateObject
- 27. Cómo devolver "no encontrado" cuando el valor de retorno es referencia constante
- 28. ¿Por qué un calificador de tipo en un tipo de retorno no tiene sentido?
- 29. Linq-to-Entities Incluir método no encontrado
- 30. Java Tipo extraño retorno genérica
Sugiero que edite su pregunta para incluir el fragmento de código en cuestión. – payne
¿Puede publicar su declaración de método (.h) y el código de llamada? –
+1 para tratar de corregir advertencias, ¡esta es una muy buena práctica! Mientras lo hace, hay varias casillas de verificación en la configuración del proyecto donde puede hacer que el compilador advierta de más cosas. – mvds