Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Objective-C

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.90
ktalonec
0 / 0 / 0
Регистрация: 25.03.2011
Сообщений: 36
#1

Массивы (музыкальная программа) - Objective-C

16.04.2012, 11:39. Просмотров 3646. Ответов 44
Метки нет (Все метки)

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

Но остановился я на моменте забивания нажатых клавиш в массив. мне нужно как то объявить массив снаружи, а потом внутри действия нажатия каждой клавиши в него всякое добавлять последовательно, я попробовал insertObject atIndex не получается выводит пустой массив, сначала думал что проблема в переводе массива в строку и выводе, но потом понял что массив просто пустой, после некоторого колдовства обнаружил что если массив объявлять внутри IBAction{} то все нормально, в общем как то так, заранее спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.04.2012, 11:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массивы (музыкальная программа) (Objective-C):

Музыкальная коллекция - PascalABC.NET
Музыкальная коллекция. Организуйте структуру для хранения информации о музыкальные произведения: исполнитель, альбом (сборник), время...

Музыкальная открытка на микроконтроллере - Микроконтроллеры
хочу сделать музыкальную открытку, подскажите пожалуйста, можно ли перепрограммировать уже готовую открытку, а если нет, тото как это можно...

Музыкальная картотека в динамическом массиве - C++
Написать программу, которая позволяет хранить музыкальную картотеку в динамическом массиве. Каждая запись должна содержать: Тип...

Нужна музыкальная база даных - MS Access
Поделитесь пожалуйста простенькой музыкальной базой

Музыкальная коллекция. taglib treeview QAbstractItemModel - C++ Qt
Добрый день! Нашел в сети такой вот редактор тегов - http://code.google.com/p/qtagger/ Десять раз прочитал документацию -...

Разработать консольное приложение с XML базой данных. Тема: музыкальная библиотека - C#
1 Разработать структуру файла XML для хранения информации об объектах предметной области. 2. Разработать DTD или Schema XML (по выбору...

44
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
21.04.2012, 14:22 #31
Вы в терминологии хоть подразберитесь немного. IBAction это просто указание Интерфейс Билдеру опознавать метод. Это обычный void. Как вызывать селектор я Вам не буду рассказывать, ибо это есть везде.
А то получается я за Вас Вашу задачу решаю.

Читайте, разбирайтесь.

Насчет
таймером можно вызывать какое то действие
Ну и вызывайте, кто Вам мешает. Еще и объект передайте как аргумент(Можно вообще передавать строчку(имя файла)).
Если не хотите работать(не понимаете) с таймером - пробуйте -performSelector:withObject:afterDelay:

PS. Без знания Основ языка и банальных конструкций, для выбранной задачи, Вы далеко не уедете. Это Вам не "Hello, world".
1
ktalonec
0 / 0 / 0
Регистрация: 25.03.2011
Сообщений: 36
22.04.2012, 14:08  [ТС] #32
zulkis, может я конечно совсем глупый, но я не могу понять, во всех примерах что я нашел c performSelector:withObject:afterDelay: селектором является некая функция (void), вот один из них

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
- (void) methodCalledByButtonClick 
{
  for (id obj in array) {
    [self doSomethingWithObj:obj];
  }
}
 
static BOOL isBad = NO;
- (void) doSomethingWithObj:(id)obj {
  if (isBad) {
    return;
  }
  if ([obj isBad]) {
    isBad = YES;
    [self performSelector:@selector(resetIsBad) withObject:nil afterDelay:0.1];
    return;
  }
  //Do something with obj
}
 
- (void) resetIsBad {
  isBad = NO;
}
Ну я думаю ладно, возможно я поступаю слишком прямолинейно, пытаюсь сделать как в примере, внутри действия привязанного к кнопке воспроизведения 4х звуков, я создаю -(void)play; в заголовочном файле и пытаюсь использовать его внутри кнопки, но мне пишет что я использую "undeclaraited identifier", я совершенно запутался

Добавлено через 1 час 6 минут
вот единственное что нашел по селектору, из этого определения понятно не многое

Добавлено через 1 минуту
"Селектор — это строка, состоящая из идентификаторов, разделённых двоеточиями. Например, если вызов имеет вид:

[mycalendar ordinalityOfUnit:myunit inUnit:myunit2 forDate:mydate]

...то селектор этого вызова "ordinalityOfUnit:inUnit:forDate:". Непосредственно в objc_sendmsg передаётся не строка, а 32битное число. Каждая динамическая библиотека и сама программа при инициализации регистрируют все используемые селекторы, устанавливая соответствие между строками и числами."
0
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
22.04.2012, 14:33 #33
И? Что неясно то именно?
Покажите Ваш код, а не тот0, что из примера.
0
ktalonec
0 / 0 / 0
Регистрация: 25.03.2011
Сообщений: 36
22.04.2012, 20:21  [ТС] #34
zulkis,
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
if ([result rangeOfString:@"63143454"].location != NSNotFound) 
    {
        CFBundleRef mainBundle1 = CFBundleGetMainBundle();
        CFURLRef soundFileURLRef1;   
        soundFileURLRef1= CFBundleCopyResourceURL(mainBundle1, (CFStringRef) @"11650__techsetsu__grandmither-s-piano-31", CFSTR ("wav"), NULL);
        UInt32 soundID1;
        AudioServicesCreateSystemSoundID(soundFileURLRef1, &soundID1);
        AudioServicesPlaySystemSound(soundID1);
        
        CFBundleRef mainBundle2 = CFBundleGetMainBundle();
        CFURLRef soundFileURLRef2;   
        soundFileURLRef2= CFBundleCopyResourceURL(mainBundle2, (CFStringRef) @"11644__techsetsu__grandmither-s-piano-25", CFSTR ("wav"), NULL);
        UInt32 soundID2;
        [self performSelector:  withObject:nil afterDelay:];
        AudioServicesCreateSystemSoundID(soundFileURLRef2, &soundID2);
        AudioServicesPlaySystemSound(soundID2);
        
        CFBundleRef mainBundle3 = CFBundleGetMainBundle();
        CFURLRef soundFileURLRef3;   
        soundFileURLRef3= CFBundleCopyResourceURL(mainBundle3, (CFStringRef) @"11646__techsetsu__grandmither-s-piano-27", CFSTR ("wav"), NULL);
        UInt32 soundID3;
        AudioServicesCreateSystemSoundID(soundFileURLRef3, &soundID3);
        AudioServicesPlaySystemSound(soundID3);
        
        CFBundleRef mainBundle4 = CFBundleGetMainBundle();
        CFURLRef soundFileURLRef4;   
        soundFileURLRef4= CFBundleCopyResourceURL(mainBundle4, (CFStringRef) @"11648__techsetsu__grandmither-s-piano-29", CFSTR ("wav"), NULL);
       
        UInt32 soundID4;
        AudioServicesCreateSystemSoundID(soundFileURLRef4, &soundID4);
        AudioServicesPlaySystemSound(soundID4);
        
    }
}
насколько я понимаю мне нужно AudioServicesCreateSystemSoundID(soundFileURLRef2, &soundID2);
AudioServicesPlaySystemSound(soundID2); положить в void и этот void записать в performSelector
0
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
22.04.2012, 21:25 #35
Нет, вы понимаете не правильно.
Цитата Сообщение от ktalonec Посмотреть сообщение
положить в void и этот void записать в performSelector
Читайте мат часть.
Читайте что такое void, что такое функции в Си и прочие основополагающие вещи. Лучше вместо гуглинга возьмите книжку и почитайте.
И ваши AudioServicesCreateSystemSoundID, etc функции - это функции C, никакие не селекторы.
Я бы рад помочь, но без принципиального понимания базовых принципов - я даже не знаю, что предложить.
Только - читайте, разбирайтесь, спрашивайте, если совсем непонятно.
0
ktalonec
0 / 0 / 0
Регистрация: 25.03.2011
Сообщений: 36
22.04.2012, 21:35  [ТС] #36
zulkis, я знаю что такое воид, это функция не возвращающая значения, ну так откуда мне ее взять тут, просто сама структура не понятна, в примере что я выложил в качестве перформСелектора именно функция воид
0
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
22.04.2012, 22:03 #37
void это НЕ функция.
Структура - создаете objC метод, внутри него пишете что вам там со звуками нужно делать, затем вызываете этот objC метод через performSelector.
1
ktalonec
0 / 0 / 0
Регистрация: 25.03.2011
Сообщений: 36
23.04.2012, 09:56  [ТС] #38
zulkis, я понимаю что я уже достал, но я начал читать мануал который описывает все с нуля, там написано про методы, я все это прочитал сделал все по шаблону мне говорят undeclaired identifier на название моего метода, там про объявление метода ничего не сказано, вот я и думаю в чем проблема я понимаю что это азы, но где правда не знаю
Описание синтаксиса методов из мануала
Начнем с методов, синтакси которых в общем виде выглядит так:

- (ТипВозвращаемыхДанных)названиеМетодаТипДанных)агрумент1продолжениеНазванияМетодаТипДанных)аргумент2;

И реальный пример:

- (NSArray *)shipsAtPointCGPoint)bombLocation withDamageBOOL) damaged;

В данном случае представлен метод с двумя аргументами. Метод начинается с знака «-» для методов экземпляра класса или с «+» для методов класса. Подробнее об отличиях мы поговорим позже.

Далее идет тип возвращаемых значений, он может быть (void), если ничего не возвращается, или (id), если возвращается объект, при этом тип его может быть любым (NSString, NSArray, NSNumber, NSDictionary…). Однако рекомендуется по возможности явно указывать тип данных, для того, чтобы компилятор мог предупредить нас о возможной ошибке.

*Разрешается не писать тип возвращаемого значения и не ставить скобки в начале метода вообще, тогда это расценивается как (id). Также, когда мы указываем (IBAction), это аналогично (void), но при этом мы сообщаем Interface Builder, что этот метод будет вызван из интерфейса.
0
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
23.04.2012, 11:41 #39
Что конкретно Вы передаете в performSelector: и на какой конкретно метод выводит undeclared identifier?
Строчки кода пожалуйста.
1
ktalonec
0 / 0 / 0
Регистрация: 25.03.2011
Сообщений: 36
23.04.2012, 12:10  [ТС] #40
zulkis, так дело в том что до перформСелектора дела пока не дошло, я делаю по шаблону
Шаблон
- (ТипВозвращаемыхДанных)названиеМетодаТипДанных)агрумент1продолжениеНазванияМетодаТипДанных)аргумент2;


вот так примерно
-(id)zvuk: (CFURLRef)ssylka peremennaya: (UInt32)soundObject;
0
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
23.04.2012, 12:16 #41
Где ошибку выдает то?
0
ktalonec
0 / 0 / 0
Регистрация: 25.03.2011
Сообщений: 36
23.04.2012, 12:56  [ТС] #42
zulkis, вот ровно напротив этой строчки пишет что zvuk undeclaired identifier
0
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
23.04.2012, 13:06 #43
Вы её в @implementation написали? Если да, читайте что такое @interface и @implementation
1
ktalonec
0 / 0 / 0
Регистрация: 25.03.2011
Сообщений: 36
23.04.2012, 14:33  [ТС] #44
zulkis, прочитал что такое @interface & @implementation продолжает ругаться, я уже как только не пробую и в разных местах писать и в заголовочном фале по разному его объявлял, бестолку он неизвестен программе!http://s2.ipicture.ru/uploads/20120423/9TvWbdVl.png
я уже по всякому пробовал этот метод писать и без @synthesize zvuk; и с ним, и внутри и снаружи
0
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
24.04.2012, 06:11 #45
Читайте для чего нужен @synthesize.
Он тут вообще не при чем.
Вы собрались имплеметировать метод внутри другого? Это глупость. Так не делается.
Прочитайте про методы. И честно - я вообще без понятия как Вам в голову пришло написать такое...
Больше теории поможет, я думаю.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2012, 06:11
Привет! Вот еще темы с ответами:

Массив структур "Музыкальная школа": вывести информацию по ученикам, играющим на заданном инструменте - C++
Создать массив, элементами которого являются структуры – список учеников музыкальной школы (фамилия, инструмент, год обучения). Вывести...

Программа на массивы - Pascal
Ввести массив А из 7 целых чисел из файла, массив B из 9 псевдослучайных чисел от 1,0 до 2,0 и массив С размерности 5х2 из вещественных...

программа на массивы - Pascal
Даны сведения о массах 16 грузов - массив А . 1) Сформировать массив В из грузов с массой >4 т. Общая масса грузов В не должна...

программа на массивы - C++
Элементы массива B(1;M) расположить в порядке возрастания их значений Весьма благодарен заранее Добавлено через 14 секунд ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
45
Yandex
Объявления
24.04.2012, 06:11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru