2011-05-05 2 views
2

이 오류를 디버깅하는 데 도움이 필요합니다. Expected Identifier. 이 코드는 -Objective-C 예상 식별자 - 간단한 구문 디버깅 문제

+(NSString *)dayOfWeek { 
    NSDate *day = [NSDate date]; 
    NSCalendar *calendar = [NSCalendar currentCalendar]; 
    NSDateComponents *components = [calendar components:NSWeekdayCalendarUnit fromDate:day]; 
    day = [calendar dateFromComponents:components]; 
    NSLog(@"The DAY OF THE WEEK is -- %@", day); 
    NSArray *daysOfTheWeek = [NSArray arrayWithObjects:@"Sunday", @"Monday", @"Tuesday", @"Wednesday", @"Thursday", @"Friday", @"Saturday", nil]; 

    NSString *dayName = [[[NSString alloc] initWithFormat:[daysOfTheWeek objectAtIndex:[[components weekday]-1]]]]; 
    return dayName; 
} 

내가 ] 아래, -1]에서 오류 마커를 얻을.

답변

5

나는이 줄을 생각합니다. initWithString으로 시작 부분에 충분해야하므로 아무것도 대체하지 않습니다.

+1

의 "나는 때문에 컴파일러 경고에 initWithFormat을 변경했습니다." 실제로는 형식 문자열을 허용하는 함수에 원시 문자열을 전달하는 것은 매우 심각한 버그입니다. 여기에 고정 된 입력 값 세트가 있었지만 그 중 하나가 @ "Mond % @ y"일 경우 프로그램이 중단됩니다. –

+0

+1 for'initWithString : –

+0

@ 존 헤스가 지적 해 주셔서 고마워요! –

1
NSString *dayName = [[NSString alloc] initWithFormat:[daysOfTheWeek objectAtIndex:[components weekday]-1]]; 

편집 : 닉 위버는 지적 것처럼 당신은 아마 initWithString:을 사용해야합니다

NSString *dayName = [[NSString alloc] initWithString:[daysOfTheWeek objectAtIndex:[components weekday]-1]]; 

편집 2 : 확실하지 않음을 새 문자열을 작성해야하는 이유. 다음면 충분합니까?

NSString *dayName = [daysOfTheWeek objectAtIndex:[components weekday]-1]; 

:는 여기 진짜 문제는 당신이 정말로 브래킷에 사용되는 알고하지 않는 것이라고 생각합니다. 이것은 컴파일러 경고에
NSString *dayName = [[NSString alloc] initWithString:[daysOfTheWeek objectAtIndex:[components weekday]-1]]; 

내가 initWithFormat을 변경 :

NSString *dayName = [[[NSString alloc] initWithFormat:[daysOfTheWeek objectAtIndex:[[components weekday]-1]]]]; 

은 다음과 같아야합니다

0
+(NSString *)dayOfWeek { 
    NSDate *day = [NSDate date]; 
    NSCalendar *calendar = [NSCalendar currentCalendar]; 
    NSDateComponents *components = [calendar components:NSWeekdayCalendarUnit fromDate:day]; 
    day = [calendar dateFromComponents:components]; 
    NSLog(@"The DAY OF THE WEEK is -- %@", day); 
    NSArray *daysOfTheWeek = [NSArray arrayWithObjects:@"Sunday", @"Monday", @"Tuesday", @"Wednesday", @"Thursday", @"Friday", @"Saturday", nil]; 
    NSString *dayName = [[NSString alloc] initWithFormat:[daysOfTheWeek objectAtIndex:[components weekday] - 1 ]]; 
    return dayName; 
} 

가 작동합니다 :)

1

대신

NSString *dayName = [[[NSString alloc] initWithFormat:[daysOfTheWeek objectAtIndex:[[components weekday]-1]]]]; 

사용

NSString *dayName = [daysOfTheWeek objectAtIndex:[components weekday]-1]; 
+0

+1 그는 문자열 배열을 가지고 있는데, 왜 그가 새로운 문자열을 만들어야합니까? –