Skocz do zawartości

Witaj!

Zaloguj lub Zarejestruj się aby uzyskać pełny dostęp do forum.

Zdjęcie
- - - - -

Biały ekran w symulatorze iOS z XCODE.


  • Zaloguj się, aby dodać odpowiedź
8 odpowiedzi w tym temacie

#1 LuK@sZ0702

LuK@sZ0702
  • 27 postów
  • SkądJaworzno

Napisano 03 stycznia 2014 - 21:13

Witam, postanowiłem wraz z nowym rokiem rozpocząć naukę programowania w środowisku XCODE, niestety już na początku natrafiłem na - mam nadzieję - mały problem. Mianowicie korzystam z książki Objective-C podstawy i korzystając z jej pierwszego rozdziału postanowiłem przerobić temat gry CoinToss, która jest w nim przedstawiona. W kodzie wszytsko wygląda w porządku, nie pojawiają się żadne błędy ani ostrzeżenia, niemniej jednak po skorzystaniu z Project -> RUN odpala się symulator a aplikacja uruchamia się jako pusty biały ekran. Stąd prośba do Was o jakieś sugestie, gdzie przypuszczalnie popełniam błąd.

#2 tmkszlc

tmkszlc

  • 1 846 postów
  • SkądSzczecin, PL

Napisano 03 stycznia 2014 - 21:32

Bez kawałka kodu nikt ci nie pomoze, wrzuć projekt i udostępnij go tu to będzie można się przyjrzeć.

#3 LuK@sZ0702

LuK@sZ0702
  • 27 postów
  • SkądJaworzno

Napisano 03 stycznia 2014 - 21:47

Więc tak jak napisałem, korzystam z książki Objective-C i przerabiam rozdział dotyczący gry CoinToss (dostępny w całości pod linkien - TUTAJ Pliki projektu na obecną chwilę - DROPBOX

Mój kod dla pliku ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController {
    UILabel *status;
    UILabel *result;
}

@property (nonatomic, retain) IBOutlet UILabel *status;
@property (nonatomic, retain) IBOutlet UILabel *result;

- (IBAction)callHeads;
- (IBAction)callTails;

@end

Mój kod dla pliku ViewController.m

#import "ViewController.h"
#import "QuartzCore/QuartzCore.h"

@implementation ViewController

@synthesize status, result;

- (void) simulateCoinToss:(BOOL)userCalledHeads {
    BOOL coinLandedOnHeads = (arc4random() % 2) == 0;
    
    result.text = coinLandedOnHeads ? @"ORZEŁ" : @"RESZKA";
    
    if (coinLandedOnHeads == userCalledHeads)
        status.text = @"Prawidłowo!";
    else
        status.text = @"Nieprawidłowo!";
    
    CABasicAnimation *rotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
    rotation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    rotation.fromValue = [NSNumber numberWithFloat:0.0f];
    rotation.toValue = [NSNumber numberWithFloat:720 * M_PI / 180.0f];
    rotation.duration = 2.0f;
    [status.layer addAnimation:rotation forKey:@"rotate"];
    
    CABasicAnimation *fade = [CABasicAnimation
                              animationWithKeyPath:@"opacity"];
    fade.timingFunction = [CAMediaTimingFunction
                              functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    
    fade.fromValue = [NSNumber numberWithFloat:0.0f];
    fade.toValue = [NSNumber numberWithFloat:1.0f];
    fade.duration = 3.5f;
    [status.layer addAnimation:fade forKey:@"fade"];
    
}

- (IBAction) callHeads {
    [self simulateCoinToss:YES];
}

- (IBAction) callTails {
    [self simulateCoinToss:NO];
}

- (void) viewDidUnload {
    [super viewDidUnload];
    self.status = nil;
    self.result = nil;
}

@end

Do tego plik .xib z interfejsem jak poniżej:

[ATTACH=CONFIG]19507[/ATTACH]

#4 Roberto

Roberto
  • 13 752 postów
  • SkądWrocław

Napisano 03 stycznia 2014 - 22:21

powinieneś używać storyboard, a nie xib'ów

#5 gzajac

gzajac
  • 47 postów
  • SkądKraków

Napisano 03 stycznia 2014 - 22:30

Do @properties które w Twoim przypadku są outletami powinieneś się odwoływać tak: self.status, self.result

W Twoim kodzie pracujesz bezpośrednio na status/result np. robiąc tak: result.text = ...
Jeśli już chcesz koniecznie pracować bezpośrednio na wskaźnikach to dla @property status, odpowiednie jest _status (XCode automatycznie tworzy sobie taką zmienną dla @property).

Dostajesz biały ekran bo oba UILabel są puste.

Ewentualnie możesz jeszcze jawnie napisać tak (stare podejście):
@synthesize result = result;

#6 wojtkow

wojtkow


  • 6 767 postów
  • Płeć:
  • SkądPoznań

Napisano 03 stycznia 2014 - 22:34

Dostaje pusty ekran, bo ma ustawiony jako interface storyboard, który jest pusty a interface tworzy w (niezałączonym i) niepodłączonym do niczego xib'ie.

#7 gzajac

gzajac
  • 47 postów
  • SkądKraków

Napisano 03 stycznia 2014 - 22:36

Dostaje pusty ekran, bo ma ustawiony jako interface storyboard, który jest pusty a interface tworzy w (niezałączonym i) niepodłączonym do niczego xib'ie.


A to faktycznie prawda.

#8 LuK@sZ0702

LuK@sZ0702
  • 27 postów
  • SkądJaworzno

Napisano 03 stycznia 2014 - 22:54

Dziękuję za wasze rady, faktycznie wystarczyło przesiąść się z xib'ów, na storyboarda i wszystko zaczęło działać jak należy. Widzę, że trzeba będzie nadrobić podstawy dotyczące najnowszego XCODE, gdyż te zawarte w książce dotyczą XCODE w wersji 4.2. Polecacie jakieś dobre materiały do nauki, najlepiej w języku polskim :) ?

#9 metal_man

metal_man
  • 489 postów
  • SkądChorzów

Napisano 04 stycznia 2014 - 11:08

powinieneś używać storyboard, a nie xib'ów


And why is that?




Użytkownicy przeglądający ten temat: 3

0 użytkowników, 3 gości, 0 anonimowych