очень основная цель-вопрос - PullRequest
2 голосов
/ 30 января 2010

Я написал простую программу, чтобы понять, как работает target-c. Эта программа - и-цзин, древнее гадание, основанное на ответе из шести линий, рассчитанном после запуска трех монет шесть раз, а затем построения гексаграммы, которая является ответом.

Я застрял в этом, я уверен, что есть простое решение. Вот как я определил линии, я знаю, что это не лучший дизайн, но я стараюсь использовать как можно больше технологий. Предположим, вы запускаете монету, она может быть 3 или 2 в зависимости от стороны, три монеты дают возможное значение 6,7,8,9.

 /**
  * identifying a coin
  */
 typedef enum {
  head=3,
  tail=2
 } Coin;

 /**
  identify a line, three coins with a side value of
  2 and 3 can result in 6,7,8,9
  */
 typedef enum {
  yinMutable=tail+tail+tail, // 6 --> 7
  yang=tail+tail+head,  // 7 
  yin=head+head+tail,   // 8
  yangMutable=head+head+head // 9 --> 8
 } Line;

 /**
  The structure of hexagram from bottom "start" to top "end"
  */
 typedef struct {
  Line start;
  Line officer;
  Line transit;
  Line minister;
  Line lord;
  Line end;
 } Hexagram;

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

1) Первый вопрос: мне интересно, есть ли какая-нибудь функция, как в javascript или c #, как foreach (свойство в гексаграмме), которое позволяет мне просматривать свойства в порядке их объявления, что решило бы мою проблему.

2) Второй вопрос: в качестве альтернативы я использовал массив Line:

Controller.m
....
Line response[6]
....

-(id) buildHexagram:... {

for(i =0.....,i++).....
  response[i]=throwCoins;

// I omit alloc view and the rest of the code...then
[myview buildSubview:response]; 
}


----------------------
subView.m


-(id) buildSubView:(Line[]) reponse {

NSLog(@"response[0]=%o",[response objectAtIndex[0]]); <--- HERE I GOT THE ERROR
}

но потом, в этом решении я получил ошибку EXC_BAD_ACCESS Поэтому, очевидно, я неправильно понимаю, как работает массив в target-c или c! В надежде, что я достаточно ясно дал понять, может кто-нибудь указать на решение первого вопроса и что я делаю неправильно во втором варианте.

спасибо Леонардо

1 Ответ

3 голосов
/ 30 января 2010

Вы создали массив C Line - для доступа к элементам вам необходимо использовать средства доступа к массиву в стиле C.

Так что вместо

[response objectAtIndex[0]]

использование

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