if (BaseActivity.this instanceof Faq)
{
Toast.makeText(BaseActivity.this, "You are in the Same Page", Toast.LENGTH_SHORT).show();
}else {
Intent intent = new Intent(BaseActivity.this, Faq.class);
startActivity(intent);
drawer.closeDrawer(GravityCompat.START);
}
//// Здесь я. Все мои действия распространяются на Activity под названием BaseActivity
Ваш код работает нормально. Его ужасный код, но он работает нормально, раздел // ничего не делать вызывается для любого совпадения, а раздел // делать что-то вызывается для каждого несоответствия в массиве. Я подозреваю, что проблема в том, что вы ожидаете, что раздел // ничего не делать будет выполнен один раз, если нет совпадений, и // сделать что-то раздел, который будет выполняться один раз, если есть какое-либо совпадение, что не так. Вы, вероятно, захотите:
-(void) findRedundant: (NSString *) aString {
#define ALPHA_ARRAY [NSArray arrayWithObjects: @"A", @"B", @"C", nil]
BOOL found = NO;
NSUInteger f;
for (f = 0; f < [ALPHA_ARRAY count]; f++) {
NSString * stringFromArray = [ALPHA_ARRAY objectAtIndex:f];
if ([aString isEqualToString:stringFromArray]) {
found = YES;
break;
}
}
if ( found ) {
// do found
} else {
// do not found
}
}
Кроме того, вы явно не понимаете макросы и то, когда вы должны и не должны их использовать (как правило, вы никогда не должны их использовать, за очень немногими исключениями). Макрос текстуально подставляется в ваш код. Это означает, что создание и инициализация массива происходит каждый раз, когда вы используете ALPHA_ARRAY. Это ужасно.
В общем, никогда не используйте #define снова (кроме констант), пока не получите более глубокое понимание того, что делаете. В этом случае вы должны создать массив, как описано в taebot:
NSArray* alphaArray = [NSArray arrayWithObjects: @"A", @"B", @"C", nil];
Затем, если вы разрабатываете для современной платформы (10.5 или iPhone), вы можете использовать Fast Enumeration, который намного проще и понятнее для чтения:
-(void) findRedundant: (NSString *) aString {
NSArray* alphaArray = [NSArray arrayWithObjects: @"A", @"B", @"C", nil];
BOOL found = NO;
for ( NSString* stringFromArray in alphaArray ) {
if ([aString isEqualToString:stringFromArray]) {
found = YES;
break;
}
}
if ( found ) {
// do found
} else {
// do not found
}
}
И наконец, вы должны прочитать документацию по NSArray и NSString, чтобы увидеть, что вы можете делать бесплатно, а затем вы найдете такие методы, как containsObject, на которые указал KiwiBastard, и вы можете переписать свою процедуру как:
-(void) findRedundant: (NSString *) aString {
NSArray* alphaArray = [NSArray arrayWithObjects: @"A", @"B", @"C", nil];
if ( [alphaArray containsObject: aString] ) {
// do found
} else {
// do not found
}
}
#define мне кажется странным. Я думаю, что каждый раз, когда вы используете ALPHA_ARRAY, будет создаваться другой экземпляр NSArray. Было бы чище использовать метод containsObject: в NSArray:
NSArray* alphaArray = [NSArray arrayWithObjects: @"A", @"B", @"C", nil];
if (![alphaArray containsObject:aString]) {
// do something
}
Я не уверен, почему ваш код выше не работает, но пробовали ли вы: