Estoy usando la arquitectura MVC para una aplicación GUI. La clase de modelo tiene algunas funciones de C. Una de las funciones C llama a algunos métodos de la clase Objective-C. Llamo a esos métodos usando un objeto de esa clase. Lo extraño es que los métodos anteriores al método xyz se llaman perfectamente, pero cuando se llama a ese método xyz, ese método y los métodos posteriores no se ejecutan. No obtengo ningún error. Entonces no puedo entender qué está pasando exactamente. ¿Alguna idea sobre cuál podría ser la razón para esto?No se puede llamar a un método de Objective C desde una función C
Respuesta
Definitivamente puede ejecutar métodos en objetos Obj-C desde una función C, por lo que es probable que haya un error en su código en algún momento. Si tuviera que adivinar, parece que un objeto es nulo cuando no se espera que lo sea. Normalmente, comenzarías estableciendo puntos de interrupción en tu función, para que puedas averiguar cuál es el estado de los objetos en cuestión.
Como señala Marc, probablemente esté utilizando una referencia al objeto OBJC que no se ha inicializado fuera del alcance de Object-c.
He aquí una muestra de trabajo de código C llamar al método de un objeto ObjC:
#import <Cocoa/Cocoa.h>
id refToSelf;
@interface SomeClass: NSObject
@end
@implementation SomeClass
- (void) doNothing
{
NSLog(@"Doing nothing");
}
@end
int otherCfunction()
{
[refToSelf doNothing];
}
int main()
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
SomeClass * t = [[SomeClass alloc] init];
refToSelf = t;
otherCfunction();
[pool release];
}
amigo, rockeador. Perdí un buen día con esto y tu código acaba de rescatar un día de otra manera horrible. Ojalá pudiera votarte 100 veces más. – eviljack
¡Otros 100 votaciones de mi parte! Esto fue increíblemente útil. – willc2
Por cierto, esto solo funcionará para un singleton. Si instancia más de un objeto, refToSelf Pointer solo señalará el último objeto. – Brian
punto de interrupción en el método antes de la XYZ, y luego empezar paso a paso en el depurador. Es sorprendente la cantidad de errores que puede detectar al pasar por el código en el depurador. De hecho, esta es una técnica recomendada para evitar errores que consiste en pasar un solo paso por el código para cualquier código nuevo que se escriba.
Estoy de acuerdo con Marc, la causa clásica de "ese método y los métodos después de que no se ejecutan" es que la referencia del objeto es nula, ya que [nil doAnything] no hará nada y no informará ningún error.
Hay una manera simple de hacer esto:
@implementation
// Define a object
ClassName *thisClass;
y luego init con la auto
thisClass = self;
Se puede utilizar cualquier var y métodos en C-Método
- 1. Llamar a Python desde Objective-C
- 2. ¿Se prohíbe llamar a la función C clásica desde el cuerpo del método de clase Objective-C++?
- 3. ¿Cómo llamar a Objective-C desde Javascript?
- 4. Llamar a una función MATLAB desde C#
- 5. ¿Se puede llamar a una función estática a través de un puntero de función en C?
- 6. Cómo llamar a un método Objective-C desde Javascript en una aplicación Cocoa/WebKit?
- 7. El método Objective-C no se llama
- 8. ¿Cómo llamar a un método desde otro método en Objective C?
- 9. ¿Cómo puedo llamar a un método en Objective-C?
- 10. función C vs. método Objective-C?
- 11. Llamar a cualquier método Java desde C#
- 12. WebKit.NET para llamar a una función de C# desde JavaScript
- 13. Llamar a un método delphi DLL desde C# Code
- 14. ¿Puedes llamar a una función C# desde JavaScript?
- 15. Llamar a una función delphi DLL desde C# Code
- 16. Problema con llamar a una función PowerShell desde C#
- 17. cómo llamar a C# desde C++
- 18. Llamar a la biblioteca Java desde Objective C en Mac
- 19. Cómo llamar a una clase C++ y su método desde un archivo c
- 20. Cómo prohibir llamar a un método C#
- 21. Llamar a un método miembro no estático desde otro método
- 22. Llamar a Python desde C++
- 23. ¿Cómo llamo a una función de Objective C?
- 24. Llamar a un método estático en C#
- 25. ¿Cómo puedo llamar a un método no estático desde un método estático en C#?
- 26. Devolviendo múltiples valores desde un método en Objective-C
- 27. cómo llamar a una función C desde C# con un parámetro WCHAR * out?
- 28. Llamar C# desde C++: cómo pasar nullptr a DateTime?
- 29. C# No se puede llamar sobrecargado método no genérico del método genérico
- 30. Cómo llamar a la función javascript desde C#
Se puede publicar algo de código ? De lo contrario, será imposible ayudar. –
En segundo lugar esa solicitud. Algún código simple será de mucha ayuda. P.ej. solo un código de la función C que muestra cómo se accede realmente al objeto obj-c y cómo se hace la llamada podría ser muy útil – Mecki