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