Objective c 是否可以手动遍历嵌套的if语句?

Objective c 是否可以手动遍历嵌套的if语句?,objective-c,c,if-statement,Objective C,C,If Statement,二叉树把我弄得不知所措,所以我想我应该尝试一种更简单(如果明显更混乱的话)的方法。 例如 if (a) { do something // wait for a button press before checking the next 'if' if (aa) { do something } else if (ab) { do something } } else if (b) { do something el

二叉树把我弄得不知所措,所以我想我应该尝试一种更简单(如果明显更混乱的话)的方法。
例如

if (a) {
    do something
    // wait for a button press before checking the next 'if'
    if (aa) {
        do something
    } else if (ab) {
        do something
    }
} else if (b) {
    do something else
}
等等。
在询问“aa”是否返回true之前,如何强制我的应用程序等待按钮按下?(等等。)


开关似乎是一个更干净的选择,所以如果有人对这种方法有答案,我很乐意试一试。不过,这是同样的问题。我不知道如何一步一步地进行,而不是一次全部进行。

如果当前函数位于次线程中,那么您可以使用

CFRunLoopRun()--停止线程,然后在按下按钮后调用CFRunLoopStop()以恢复操作

我希望您以稍微不同的方式执行相同的实现: 将流量分为两部分进行制动

在第一部分--

在第二部分中,单击按钮后执行此操作

   if (aa) {
        do something
    } else if (ab) {
        do something

这里有一种不同的方法,使用视图的状态或控制变量来确定在按下按钮的情况下它接下来应该做什么

// pseudo-code based on your example
-(IBAction) buttonPress1
if (a) {
    do something
    self.setState = stateA;
} else if (b) {
    do something else
    self.setState = stateB;
}

-(IBAction) buttonPress2
 if (self.state == stateA) {
    if (a) {
        do something
    } else if (b) {
        do something
    }
 }
希望这有帮助,如果没有,请在评论中提问


[编辑]

好的,在你解释了DA/ME/ME2参考资料之后,我得到了你想要的

你可能想做的是,将你的对话存储在plist中,加载到NSDictionary中。(通读字典)

每个NSDictionary应如下所示:

键=值

@“提示”=@“嗨,我叫鲍勃” @“MEAN”=下一个CONVA选择的NSDictionary对象 @“NICE”=NICE的下一个CONVA选择的NSDictionary对象

const BOOL NICE = YES;
const BOOL MEAN = !NICE;

NSDictionary *convo = //loaded to initial starting point from your plist file

- (IBAction) playerChoseMean:(id)sender
{
    [self sayConvo:convo withChoice:MEAN];
}

- (IBAction) playerChoseNice:(id)sender
{
    [self sayConvo:convo withChoice:NICE];
}

- (void) sayConvo:(NSDictionary)convo withChoice:(BOOL)b
{
  NSLog(@"NPC says: %@", [convo valueForKey:@"prompt"]);
  if(b) {
     convo = (NSDictionary*)[convo valueForKey:@"NICE"];
  } else {
     convo = (NSDictionary*)[convo valueForKey:@"MEAN"];
  }

  if (convo == [NSNull null] || convo == nil) then continue;
  //else continue
}
下面是一个示例NSDictionary图,应该可以帮助您开始

NSDictionary *intro = [NSDictionary dictionaryWithCapacity:3];
NSDictionary *nice = [NSDictionary dictionaryWithCapacity:3];
NSDictionary *nicenice = [NSDictionary dictionaryWithCapacity:3];
NSDictionary *nicegoodbye = [NSDictionary dictionaryWithCapacity:3];
NSDictionary *mean = [NSDictionary dictionaryWithCapacity:3];
NSDictionary *meangoodbye = [NSDictionary dictionaryWithCapacity:3];

[intro addValue:@"hi there!" forKey:prompt];
[intro addValue:nice forKey:@"NICE"];
[intro addValue:mean forKey:@"MEAN"];

[nice addValue:@"that was nice" forKey:prompt];
[nice addValue:nicenice forKey:@"NICE"];
[nice addValue:mean forKey:@"MEAN"];

[nicenice addValue:@"awww" forKey:prompt];
[nicenice addValue:nicegoodbye forKey:@"NICE"];
[nicenice addValue:mean forKey:@"MEAN"];

[nicegoodbye addValue:@"you were super nice, here's a bonus for being so nice" forKey:prompt];
[nicegoodbye addValue:[NSNull null] forKey:@"NICE"];
[nicegoodbye addValue:[NSNull null] forKey:@"MEAN"];

[mean addValue:@"that was mean" forKey:prompt];
[mean addValue:nice forKey:@"NICE"];
[mean addValue:meangoodbye forKey:@"MEAN"];

[meangoodbye addValue:@"you're a jerk!  goodbye!" forKey:prompt];
[meangoodbye addValue:[NSNull null] forKey:@"NICE"];
[meangoodbye addValue:[NSNull null] forKey:@"MEAN"];


看一看这个极好的例子,上面的

刹车慢/停。破裂是毁灭/分离。只是想让你知道…UH多线程?我从来没有这样的需要,但看起来很方便…你说的“零件”到底是什么意思?需要使用多种方法,还是完全独立的循环?我希望一切尽可能紧凑。我的意思是——它们应该被放置在不同的功能中。如果你能提供更多的细节,我可能会更好地帮助你。我的意思是,其他每一个都是通过按钮来管理的。按钮1在初始条件(if)上返回true,按钮2在另一个条件(else if)上返回true。如果这有意义的话。我敢肯定,你的代码在某些地方是有用的,但它不是我想要的。@Thromordyn,我发布了一些额外的东西。你必须问一个更关注数据库的人,因为我确信这在CoreData中更容易实现。我想我理解你在这里做的事情……是的,是的,看起来很棒。所以这是一本词典,用来处理每一个可能的对话,是吗?我想我有一个(死的)应用程序,里面有一些代码,可以帮助我从plist中获取信息……我仍然对如何逐步完成对话感到困惑。我来看看SE。(我只看过CoreData一次,它看起来有很多东西需要学习。它值得吗(比如sqlite3),还是我应该坚持我已经(大部分)知道的东西?)Ray Wenderlich有一些很棒的教程。我会看看我能用CoreData做些什么。重新标记由于这与objective-c无关,这是一个直接的c查询我很抱歉。我所做的唯一不是C对象的C是在Box 2D(CCOS2D物理引擎)教程中对C++的窥视。不完全一样,但你明白了。调试器不会做你想做的吗?或者这不仅仅是检查代码的运行时行为吗?我想从一开始这样说会有帮助,但在当时它似乎并不重要。我真傻。我希望能有一些东西,例如,允许玩家有多个与NPC交互的选项。想想《龙的时代》或《质量效应2》,但规模要小得多。我会在下面的帖子中回答你关于ME2/DA的问题。
NSDictionary *intro = [NSDictionary dictionaryWithCapacity:3];
NSDictionary *nice = [NSDictionary dictionaryWithCapacity:3];
NSDictionary *nicenice = [NSDictionary dictionaryWithCapacity:3];
NSDictionary *nicegoodbye = [NSDictionary dictionaryWithCapacity:3];
NSDictionary *mean = [NSDictionary dictionaryWithCapacity:3];
NSDictionary *meangoodbye = [NSDictionary dictionaryWithCapacity:3];

[intro addValue:@"hi there!" forKey:prompt];
[intro addValue:nice forKey:@"NICE"];
[intro addValue:mean forKey:@"MEAN"];

[nice addValue:@"that was nice" forKey:prompt];
[nice addValue:nicenice forKey:@"NICE"];
[nice addValue:mean forKey:@"MEAN"];

[nicenice addValue:@"awww" forKey:prompt];
[nicenice addValue:nicegoodbye forKey:@"NICE"];
[nicenice addValue:mean forKey:@"MEAN"];

[nicegoodbye addValue:@"you were super nice, here's a bonus for being so nice" forKey:prompt];
[nicegoodbye addValue:[NSNull null] forKey:@"NICE"];
[nicegoodbye addValue:[NSNull null] forKey:@"MEAN"];

[mean addValue:@"that was mean" forKey:prompt];
[mean addValue:nice forKey:@"NICE"];
[mean addValue:meangoodbye forKey:@"MEAN"];

[meangoodbye addValue:@"you're a jerk!  goodbye!" forKey:prompt];
[meangoodbye addValue:[NSNull null] forKey:@"NICE"];
[meangoodbye addValue:[NSNull null] forKey:@"MEAN"];