2017-04-21 6 views
0

Also, ich bin neu Entwicklung und obj c zu zwicken und ich versuche, den Stil des Docks mit diesem CodeWas ist falsch an meinem Code? (Obj c zwicken Entwicklung)

%hook SBWallpaperEffect 
-(void)setStyle: (NSInteger)arg1{ 
    arg1 = 5; 
} 
%end 

zu ändern, aber es funktioniert nicht. Was mache ich falsch?

+0

Können Sie weitere Hinweise hinzufügen, um das Problem zu lösen? Ihre Funktion '- (void) setStyle: (NSInteger) arg1 { arg1 = 5; } 'ist wahr. –

+0

@CuongNguyen Das ist alles Code, den ich habe und die Nummer 5, die ich auf arg1 setze, soll den Dock-Stil zu einer weicheren Unschärfe ändern oder wenn ich es auf 14 ändere, machte es es dunkel wie Noctis es tat. Aber mein Code funktioniert nicht. Es funktioniert auf flex tho – Saeed

Antwort

0

Ok, also habe ich herausgefunden, dass ich mit NSInteger statt lange lang. Wie folgt aus:

  • (void)setStyle:(long long)arg1;

Auch ich war mit

SBWallpaperEffect

Statt

SBWallpaperEffectView

Und ich sollte den Wert innerhalb % orig

So festgelegt haben, Dies ist der richtige Weg, um es zu schreiben:

%hook SBWallpaperEffectView 
- (void)setStyle:(long long)arg1{ 
    arg1 = 5; 
    %orig(arg1); 
    return; 
} 
%end 
+0

Das 'return;' am Ende ist überflüssig. – FireMango

+0

@FireMango oh yeah ich habe vergessen, es zu entfernen, als ich es thx getestet habe – Saeed

0

OK, ich denke, das ist die typische Art von Zeigerproblem, mit der sich viele Programmierer konfrontiert sehen. Sie übergeben eine NSInteger an die Funktion und arg1 ist eine copy des Wertes, der übergeben wird. Mit anderen Worten, egal wie Sie arg1 innerhalb der Funktion ändern, ändert sich die ursprüngliche Variable nicht.

Um die Dinge klarer zu machen, um das Snippet folgenden Code aussehen:

NSInteger myInteger = 0; 
NSInteger arg1; 
arg1 = myInteger; 
arg1 = 5; 
// myInteger is still 0! 

Ändern arg1 nicht den Wert von myInteger ändert, und das ist, was Sie in Ihrer Funktion tun. Die arg1 kopiert den Wert der übergebenen Ganzzahl, wird auf 5 gesetzt und dann am Ende der Funktion freigegeben.

Stattdessen versuchen Sie dies:

-(void)setStyle:(NSInteger *)arg1{ 
    arg1 = 5; 
} 

und rufen dann die Funktion wie folgt aus:

NSInteger myInteger = 0; 
[self setStyle:&myInteger]; 
//myInteger is now 5! 

Jetzt werden Sie das Ergebnis erhalten Sie wollen.

Wenn Sie nicht mit diesen unordentlichen Zeigern Sachen beschäftigen mögen, den zurückgehenden Wert der Funktion verwenden, um die Nummer wie folgt weitergeben müssen:

-(NSInteger)getStyle:(NSInteger)arg1{ 
    // do some calculation 
    arg1 += 5; 
    return arg1; 
} 

oder so etwas wie (ohne Parameter):

-(NSInteger)getStyle{ 
    return 5; 
} 

und nennen es mag:

myInteger = [self getStyle:myInteger]; 
// or 
myInteger = [self getStyle]; 

Jetzt myInteger wird auch b e 5. Hoffe das hilft :)

+0

ich den Fehler: Verwendung von nicht deklarierter Bezeichner ‚Selbst‘ – Saeed

+0

ich die nicht angemeldete Kennung immer noch ‚Selbst‘ Fehler – Saeed

+0

So sah ich in der sdk und das ist, was ich gefunden habe: - (void) setStyle : (lang lang) arg1; Wie kann ich den Wert für arg1 festlegen? – Saeed

Verwandte Themen