Кто-то хочет посмотреть на мой (очень маленький) проект на DropBox и дать мне подсказку о моих IB-соединениях? - PullRequest
0 голосов
/ 22 августа 2010

Я работаю над очень маленьким (одно представление) приложением для iPhone (iOS 4.0.2 на Xcode 3.2.3) и думаю, что мне чего-то не хватает в том, как я установил свои соединения IBOutlet и IBAction в IB. Я надеюсь, что один (или несколько) из вас, любезных людей из эфира, захотят подключиться к моему dropbox и сделать проект и дать мне подсказку, где я облажался?

Я работал над этим в течение нескольких дней (ну, много часов в течение трех дней) и еще не нашел свою ошибку ....

:: Вздох ::

Кто-нибудь игра для этого? Вот ссылка, если вы: http://dl.dropbox.com/u/5271440/picChoice.zip

О приложении:

При запуске это приложение должно вызвать окно на симуляторе, которое содержит UIImageView, UILabel и UISegmentedControl. UIImageView должен отображать изображение по умолчанию, UILabel должно отображать строку по умолчанию, и при касании любого сегмента в UISegmentedControl изображение и метка должны соответственно меняться.

Я какое-то время работал на симуляторе, но когда я загрузил его на свой iPhone, я обнаружил несколько сбоев (неправильная инициализация массива и проблемы с указателями. Я учусь ....)

После, казалось бы, "исправления" ошибок сбоя, я, кажется, разорвал свои соединения, чтобы никогда больше не функционировать должным образом ...

Любая помощь искренне ценится!

С уважением,

Стив О'Салливан

Ответы [ 2 ]

1 голос
/ 23 августа 2010

У вас больше проблем, чем просто не отображаемое представление. После того, как вы последуете ответу Джона, у вас все равно не останется ничего, кроме ярлыка с надписью «Метка» и сегментированного элемента управления, который ничего не влияет. Для того, чтобы первоначальный взгляд был правильным, вы должны сначала удалить три строки кода:

txtLabel = [[UILabel alloc] init];
imageView = [[UIImageView alloc] init];
seg = [[UISegmentedControl alloc] init];

Среда выполнения позаботится об этом за вас. Как только они будут удалены, вы получите счастливое лицо и правильный текст на этикетке. На этом этапе вы получаете пустые изображения и текст, если вы выбираете сегмент. Прямо сейчас вы должны внести изменения до сих пор добавить точку останова в ваш метод -(IBAction)segmentedControlValueChanged, а затем собрать и отладить. Нажмите на сегмент и затем посмотрите в отладчике под self, обратите внимание, что у imageArray и txtArray есть 0 объектов. чтобы исправить это, вам нужно сделать еще несколько изменений. Поскольку вы не вносите никаких изменений в массив после создания, вы можете сделать их регулярными NSArray s и объявить их как свойства (не забудьте также и @synthesize). Чтобы свести к минимуму переписывание существующего кода, сделайте ваш viewDidLoad похожим на это:

- (void)viewDidLoad
{
//  txtLabel = [[UILabel alloc] init];
//  imageView = [[UIImageView alloc] init];
//  seg = [[UISegmentedControl alloc] init];
    NSMutableArray *anArray = [[NSMutableArray alloc] init];

    [anArray addObject:[UIImage imageNamed:@"jupiter2.JPG"]];
    [anArray addObject:[UIImage imageNamed:@"waffles?.JPG"]];
    [anArray addObject:[UIImage imageNamed:@"enterprise.JPG"]];
    [anArray addObject:[UIImage imageNamed:@"wrunning.JPG"]];
    [anArray addObject:[UIImage imageNamed:@"ApolloCSM.JPG"]];
    self.imageArray = [anArray copy];

    [anArray removeAllObjects];
    NSString *myStr = [[NSString alloc] initWithString:@"Jupiter II"]; 
    [anArray addObject: myStr];
    [myStr release];

    myStr = [[NSString alloc] initWithString:@"Could this be OUR Waffles?"]; 
    [anArray addObject: myStr];
    [myStr release];

    myStr = [[NSString alloc] initWithString:@"USS Enterprise NCC-1701"]; 
    [anArray addObject: myStr];
    [myStr release];

    myStr = [[NSString alloc] initWithString:@"A Woman Running"]; 
    [anArray addObject: myStr];
    [myStr release];

    myStr = [[NSString alloc] initWithString:@"Apollo Command and Service Modules"]; 
    [anArray addObject: myStr];
    [myStr release];

    self.txtArray = [anArray copy];
    [anArray release];
    imageView.image = [UIImage imageNamed:@"happy-face.JPG"];
    txtLabel.text = @"Hi there!";

    [imageView release];

    [super viewDidLoad];
}

Вы также можете использовать метод NSArray arrayWithObjects:, чтобы сократить метод и выделить меньше объектов на этом пути.

0 голосов
/ 23 августа 2010

Я скачал это. alt text

У вас есть открытый IB, в области документов вы можете щелкнуть правой кнопкой мыши на представлении, подключить «Новый источник ссылок» к владельцу файлов, и когда вы уроните его туда, вы получите возможность просмотра.

Это иногда случается и все разрушается, если это не работает.

Не забудьте пометить вопросы как принятый ответ (спасибо).

Джон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...