2016-06-16 10 views
0

dieser Code funktioniert gut und ich bekomme Button, während ich diesen Code auf Emulator testen, aber ich bekomme nil, wenn ich das auf echten Gerät testen.
Taste wird in Header-Datei-SchnittstelleCode funktioniert gut auf Emulator, aber immer Null auf Real-Gerät

@property (weak, nonatomic) UIButton *button; 

erklärt dann wird es in Implementierungsdatei in einem Funktionsaufruf

@synthesize button; 

dann

synthetisiert ich dieses

CGRect screenRect = [[UIScreen mainScreen] bounds]; 
CGFloat screenWidth = screenRect.size.width; 
CGFloat screenHeight = screenRect.size.height; 

screenHeight = screenHeight - 135; 

//Call 
button = [UIButton buttonWithType:UIButtonTypeCustom]; 

tue, wenn ich diese laufen Code auf echtem Gerät (iPhone 5) der Knopf ist immer Null. Ich habe bemerkt, während das Debuggen nach der letzten Zeile läuft die Ausführung zu

geht zurück
CGFloat screenHeight = screenRect.size.height; 

und beginnt wieder, übrigens gibt es keine Schleife Code hier .. Ich kann dieses Phänomen verstehen. Was fehlt mir hier?

+0

Was nennt die Methode von wo ist Ihr Code? – Larme

+0

scheint hier nicht genug Code zu sein, um zu sehen, was passiert. Wie wird die Schaltfläche deklariert, verwenden Sie ein Storyboard oder erstellen Sie es programmatisch? – Dominic

+0

Ich verwende kein Storyboard, nach dem Erstellen füge ich es als Unteransicht programmatisch hinzu. – Saifee

Antwort

2

Sie haben einen schwachen Verweis auf Ihre Schaltfläche, daher wird die Zuordnung aufgehoben, bevor Sie sie als Unteransicht hinzufügen. Sie können entweder es ändern, um eine starke Referenz:

@property (nonatomic, strong) UIButton *button; 

oder einen Verweis auf die Taste halten, während Sie es zu Ihrer Ansicht hinzuzufügen:

UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[self.view addSubview:myButton]; 
_button = myButton; 

Es ist nun von der Ansicht so gewonnen‘beibehalten wird t loslassen.

1

code1:

CGRect screenRect = [[UIScreen mainScreen] bounds]; 
CGFloat screenWidth = screenRect.size.width; 
CGFloat screenHeight = screenRect.size.height; 

screenHeight = screenHeight - 135; 
button = [UIButton buttonWithType:UIButtonTypeCustom]; 

code2:

CGRect rect = CGRectMake(10, 10, 10, 10); 
CGFloat a = rect.size.width; 
CGFloat b = rect.size.height; 

b = b - 1; 
button = [UIButton buttonWithType:UIButtonTypeCustom]; 

Ich betreibe code1 und code2 im Gerät finde ich, dass

code1 CGFloat screenHeight = screenRect.size.height;

und code2 zurück gehen wird nach dem Ausführen der letzten Zeile nicht zurückgehen.

Ich denke, vielleicht etwas Beziehung über die Geräteeffizienz oder die Funktion ([[UIScreen mainScreen] bounds]).

Ich hoffe, es hilft.

+0

Danke, dass Sie die Hinrichtungssache gefangen haben, aber das hat das Problem nicht gelöst. – Saifee