Pregunta

#import <UIKit/UIAlertView.h>

@class NSObject;

@interface SBIconController : NSObject
+ (SBIconController *)sharedInstance;
- (BOOL)isEditing;
@end

%hook SBIconController
-(void)iconTapped:(id)tapped {
    SBIconController *sbic = [objc_getClass("SBIconController") sharedInstance];
    if ([sbic isEditing]) {
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Message"  message:[NSString stringWithFormat:@"%@", tapped] delegate:nil cancelButtonTitle:@"OK"  otherButtonTitles:nil];
        [alertView show];
        [alertView release];
    }
    %orig;
}
%end

Encima es un simple tweak que he creado con el Logos.Por alguna razón, después de la instalación, no hay nada de trabajo, no puedo averiguar cuál es el problema y Cómo puedo solucionar este problema?

Otras preguntas que tengo son:

  • ¿Por qué hemos de declarar la clase como SBIconController cuando ya hay un SBIconController la clase?
  • ¿Por qué nos declarar como una subclase de NSObject?
  • ¿Por qué no podemos simplemente escribir en SBIconController cuando estamos llamando al [SBIconController sharedInstance] en lugar de [objc_getClass("SBIconController") sharedInstance]?

Muchas gracias por tu ayuda!

¿Fue útil?

Solución

El código está bien.He probado (yo no uso logos), y iconTapped: el método se llama de hecho cuando toque el icono de una aplicación.Pero, ¿qué estás tratando de lograr con isEditing?Esta propiedad indica si se está editando SpringBoard (toque y mantenga pulsado un icono de la aplicación) y cuando es igual a YES método iconTapped: NO se llama cuando el icono está girada.Se llama sólo cuando isEditing es igual NO.Así que le sugiero que insertar alerta sin if ([sbic isEditing]) para probar si el tweak está trabajando.

En cuanto a tu otra pregunta:

  1. Cuando se trata privado con Api no tenemos encabezados y recibirá advertencias/errores si tratamos de usarlos.En tu caso es SBIconController.Para resolver este problema podemos descargar los encabezados de que los demás objeto de dumping utilizando diversas herramientas como la clase de volcado o declarar estos privado Api de sí mismo.En tu caso es este último.
  2. Porque SBIconController hereda de NSObject.
  3. Usted puede hacerlo de cualquier manera.Por supuesto, cuando usted tiene la declaración de la clase no es necesario el uso de objc_getClass.Y en el caso de que usted incluso no necesita cualquiera de estas cosas.Usted puede utilizar self como lo haría en cualquier otro obj-C método.El código se verá así:

    %hook SBIconController
    -(void)iconTapped:(id)tapped {
        if ([self isEditing]) {
            UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Message"  message:[NSString stringWithFormat:@"%@", tapped] delegate:nil cancelButtonTitle:@"OK"  otherButtonTitles:nil];
            [alertView show];
            [alertView release];
        }
        %orig;
    }
    %end
    
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top