#iphone #uitableview #nsstring #nsmutablearray #cross-reference
#iPhone #uitableview #nsstring #nsmutablearray #перекрестная ссылка
Вопрос:
Я разрабатываю проект игрового автомата, который имеет второе представление для страницы с рекордами. По большей части все работает, за исключением перехода победителя из игрового автомата на страницу с рекордами. Вот мой код в методе внутри slot machine:
if(win == YES) {
NSString *msg = nil;
if(playerField.text.length > 0) {
msg = [[NSString alloc] initWithFormat:@"%@", playerField.text];
}
NSLog(@"DEBUG");
[(HighScorePage *)self.view addNewHighScore:msg];
[self performSelector:@selector(playWinSound) withObject:nil afterDelay:.5];
[msg release];
}
И вот метод addNewHighScore в HighScorePage:
-(void)addNewHighScore:(NSString *)player {
NSMutableArray *tempArray = [[NSMutableArray alloc] init];
int i = 0;
for (NSArray *count in dynPlayerArray) {
[tempArray addObject:[NSIndexPath indexPathForRow:i inSection:0]];
}
[tempArray addObject:player];
[[self highScores] beginUpdates];
[[self highScores] insertRowsAtIndexPaths:(NSArray *)tempArray withRowAnimation:UITableViewRowAnimationNone];
[[self highScores] endUpdates];
[tempArray release];
}
Все еще новичок в этом, так что дайте мне знать, что вы думаете! Спасибо!
Комментарии:
1. где это утверждение if(win == YES)?
2. в моем IBAction называется spin, вызывается каждый раз, когда пользователь нажимает кнопку. Это заставляет мой игровой автомат вращаться, воспроизводить звуки и прочее. Это все функции, все, что мне нужно знать, это как передать строку из одного класса в другой
3. все это функционирует*
Ответ №1:
Если вы спросите меня, ваши данные о высоком балле должны находиться в классе модели, доступ к которому может получить каждый, например, singleton.
Когда ваш игрок выигрывает, ваш контроллер просмотра слотов должен вставить новый высокий балл в этот класс модели, а затем, используя либо наблюдение за значением ключа, либо уведомления, представление с высоким баллом должно обновиться.
Комментарии:
1. Есть ли более простой способ? Я не хочу воссоздавать весь этот проект, чтобы сделать его более эффективным, мне просто нужен работающий метод.
2. Я немного смущен тем, как организован ваш код. Насколько я понимаю, ваш первый фрагмент находится внутри действия вашего spinner ViewController. Что такое HighScorePage? Это похоже на ViewController, но вы вызываете его с помощью self.view.
3. И slotmachine, и highscorepage являются представлениями моего tabbarcontroller. highScores — это мой UITableView, в котором хранятся значения, но это обновление UITableView для меня не имеет смысла (я перехожу к этому из Java). Кажется, что для заполнения UITableView вам нужно использовать NSArray, но NSArray не является динамическим (не может добавлять новые объекты). Поэтому имело бы смысл использовать NSMutableArray, который может меняться, но Objective-C глуп и не хочет этого принимать. Я вроде как ненавижу этот язык, лол.
4. 1 / Вы говорите о ViewControllers, а не views, разница действительно важна, и я думаю, что ваша главная проблема заключается в вызове (HighScorePage *)this.view 2 / Конечно, вы можете использовать NSMutableArray в качестве источника данных для UITableView, вы можете использовать все, что хотите, если вы можете перекачивать данные из него и отправлять их в свой UITableView через методы протокола UITableViewDataSource. 3/ Пожалуйста, уделите немного времени пониманию фреймворка, прежде чем ненавидеть его.
5. Извините, просто я никогда раньше не был так разочарован языком.
Ответ №2:
В своем комментарии вы спросили, как передать строку из одного класса в другой, вот ответ —
ЕСЛИ вы хотите передать строковое значение из класса B в класс A, то в файле class A .h создайте экземпляр NSMutableString и определите его как свойство как —
NSString *stringVar;
@property (nonatomic, retain) NSString *stringVar;
and also synthesize this property in class A's .m file for setter amp; getter as-
@ synthesize stringVar;
затем в классе B получите доступ к этой строке как к свойству класса A и назначьте, какое значение вы хотите передать из класса B в класс A.
Надеюсь, это вам поможет. Также для получения дополнительной информации о свойстве посмотрите —