2010-08-02 4 views
0

Я строю медиа-scrobbler. То, что я хочу, чтобы программа выполняла, - это определить носитель из iTunes/MPlayer и отправить программу через API. Я потерял эту часть, но когда один и тот же заголовок и сегмент мультимедиа (трек/эпизод) сравнивается с этим оператором If, он повторяет одно и то же действие, которое я не хочу, чтобы программа выполняла.Проблема с операторами If

Вот проблемный код, который я прохожу:

if ([[segment stringValue] length] == 0 || [[mediatitle stringValue]length] == 0) { 
     // Do Nothing 
    } 
    else if ([mediatitle stringValue] == ScrobbledMediaTitle && [segment stringValue] == ScrobbledMediaSegment && scrobblesuccess == 1) { 
     // Do Nothing 
     } 
    else { 
     int httperror = [self scrobble]; 
     switch (httperror) { 
      case 200: 
       [scrobblestatus setObjectValue:@"Scrobble Successful..."]; 
       [GrowlApplicationBridge notifyWithTitle:@"Scrobble Successful" 
              description:[NSString stringWithFormat:@"%@ - %@", [mediatitle stringValue], [segment stringValue]] 
             notificationName:@"Message" 
               iconData:nil 
               priority:0 
               isSticky:NO 
              clickContext:[NSDate date]]; 
       ScrobbledMediaTitle = [mediatitle stringValue]; 
       ScrobbledMediaSegment = [segment stringValue]; 
       scrobblesuccess = YES; 
       //Set up Delegate 
       Melative_ExampleAppDelegate* appDelegate=[NSApp delegate]; 
       //Set last successful scrobble to statusItem Tooltip 
       [appDelegate setStatusToolTip:[NSString stringWithFormat:@"MelScrobbleX - Last Scrobble: %@ - %@", [mediatitle stringValue], [segment stringValue]]];    
       NSLog(@"ScrobbledMediaTitle = %@", ScrobbledMediaTitle); 
       NSLog(@"ScrobbledMediaSegment = %@" , ScrobbledMediaSegment); 
       NSLog(@"BOOL = %d", (int)scrobblesuccess);    
       break; 
      case 401: 
       // Set Status 
       [scrobblestatus setObjectValue:@"Unable to Scrobble..."]; 
       [GrowlApplicationBridge notifyWithTitle:@"Scrobble Unsuccessful" 
              description:@"Check your login information and try scrobbling again." 
             notificationName:@"Message" 
               iconData:nil 
               priority:0 
               isSticky:NO 
              clickContext:[NSDate date]]; 
       scrobblesuccess = NO; 
       break; 
      default: 
       // Set Status 
       [scrobblestatus setObjectValue:@"Unable to Scrobble..."]; 
       [GrowlApplicationBridge notifyWithTitle:@"Scrobble Unsuccessful" 
              description:[NSString stringWithFormat:@"Unknown Error. Error %i", httperror] 
             notificationName:@"Message" 
               iconData:nil 
               priority:0 
               isSticky:NO 
              clickContext:[NSDate date]]; 
       scrobblesuccess = NO; 
       break;    
     } 

} 
} 

Я пытаюсь выяснить, с выходом NSLog и это то, что я получаю:

2010-08-01 21:58:56.935 MelScrobbleX[7775:a0f] ScrobbledMediaTitle = (null) 
2010-08-01 21:58:56.935 MelScrobbleX[7775:a0f] ScrobbledMediaSegment = (null) 
2010-08-01 21:58:56.935 MelScrobbleX[7775:a0f] BOOL = 0 
2010-08-01 21:58:56.935 MelScrobbleX[7775:a0f] mediatitle = Lia COLLECTION ALBUM "SPECTRUM RAYS" 
2010-08-01 21:58:56.936 MelScrobbleX[7775:a0f] mediasegment = Tori no Uta -StripE REMIX- 
2010-08-01 21:58:56.936 MelScrobbleX[7775:a0f] Scrobbled 
2010-08-01 21:58:56.936 MelScrobbleX[7775:a0f] ScrobbledMediaTitle = Lia COLLECTION ALBUM "SPECTRUM RAYS" 
2010-08-01 21:58:56.936 MelScrobbleX[7775:a0f] ScrobbledMediaSegment = Tori no Uta -StripE REMIX- 
2010-08-01 21:58:56.936 MelScrobbleX[7775:a0f] BOOL = 1 
2010-08-01 21:59:06.709 MelScrobbleX[7775:a0f] ScrobbledMediaTitle = Lia COLLECTION ALBUM "SPECTRUM RAYS" 
2010-08-01 21:59:06.709 MelScrobbleX[7775:a0f] ScrobbledMediaSegment = Tori no Uta -StripE REMIX- 
2010-08-01 21:59:06.710 MelScrobbleX[7775:a0f] BOOL = 1 
2010-08-01 21:59:06.710 MelScrobbleX[7775:a0f] mediatitle = Lia COLLECTION ALBUM "SPECTRUM RAYS" 
2010-08-01 21:59:06.710 MelScrobbleX[7775:a0f] mediasegment = Tori no Uta -StripE REMIX- 
2010-08-01 21:59:06.711 MelScrobbleX[7775:a0f] Scrobbled 
2010-08-01 21:59:06.711 MelScrobbleX[7775:a0f] ScrobbledMediaTitle = Lia COLLECTION ALBUM "SPECTRUM RAYS" 
2010-08-01 21:59:06.711 MelScrobbleX[7775:a0f] ScrobbledMediaSegment = Tori no Uta -StripE REMIX- 
2010-08-01 21:59:06.711 MelScrobbleX[7775:a0f] BOOL = 1 

не могу понять причина, по которой оператор IF не срабатывает, поскольку значения одинаковы, а scrobbleSuccess - true.

+0

Я только что редактировал ваше сообщение. В следующий раз, пожалуйста, отформатируйте код – vodkhang

+0

Objective-C болит мои глаза ... –

+0

Извините, что ... Он не вставлял правильно ...> _ < – chikorita157

ответ

3

Сравнение объектов с == сравнивает равенство указателя. Если вы хотите узнать, имеют ли объекты одинаковое значение (даже если они существуют в отдельных ячейках памяти), используйте isEqual: или, в случае NSString, isEqualToString:.

+0

Это устранило проблему ... Я предположил, что == работал со строками, поскольку работал с целыми числами и булевыми значениями (также потому, что я пришел из Visual Basic), но я был неправ. Мне нужно нарушить эти плохие привычки. :п – chikorita157