2010-05-18 6 views
2

저는 많은 자원을 활용하여 Objective-C를 가르치고 있으며 그 중 하나는 iTunes U (2010 년 수업)를 통해 제공되는 Stanford iPhone Dev 클래스입니다.Objective-C : NSMutableDictionary 채우기에 대한 조언이 필요합니다.

가사 노동 과제 중 하나는 미리 정의 된 키 및 값 목록 (URL)이있는 변경 가능한 사전을 채울 것을 요청했습니다. 나는 함께 코드를 삽입 할 수 있었다, 그러나 나는 그것을 보면, 내가 할 노력하고있어 접근하는 나를 위해 더 나은 방법이 아마이 계속 생각 :

  1. 을 미리 정의와 NSMutableDictionary 채우기가 키와 사전의 키를 통해
  2. 열거 값과는 키와 값을 모두 기록이 기준을 충족하는 경우
  3. "스탠포드"로 시작 있는지 확인하기 위해 각 키를 확인

나는 것 내가 함께 한 것을 향상시킬 수있는 방법에 대한 피드백을 정말 고맙게 생각합니다. 저는 초급자의 정의에 불과하지만 Objective-C 학습의 도전을 정말로 즐기고 있습니다.

void bookmarkDictionary() { 
    NSMutableDictionary* bookmarks = [NSMutableDictionary dictionary]; 

    NSString* one = @"Stanford University", 
    *two = @"Apple", 
    *three = @"CS193P", 
    *four = @"Stanford on iTunes U", 
    *five = @"Stanford Mall"; 

    NSString* urlOne = @"http://www.stanford.edu", 
    *urlTwo = @"http://www.apple.com", 
    *urlThree = @"http://cs193p.stanford.edu", 
    *urlFour = @"http://itunes.stanford.edu", 
    *urlFive = @"http://stanfordshop.com"; 

    NSURL* oneURL = [NSURL URLWithString:urlOne]; 
    NSURL* twoURL = [NSURL URLWithString:urlTwo]; 
    NSURL* threeURL = [NSURL URLWithString:urlThree]; 
    NSURL* fourURL = [NSURL URLWithString:urlFour]; 
    NSURL* fiveURL = [NSURL URLWithString:urlFive]; 

    [bookmarks setObject:oneURL forKey:one]; 
    [bookmarks setObject:twoURL forKey:two]; 
    [bookmarks setObject:threeURL forKey:three]; 
    [bookmarks setObject:fourURL forKey:four]; 
    [bookmarks setObject:fiveURL forKey:five]; 

    NSString* akey; 
    NSString* testString = @"Stanford"; 

    for (akey in bookmarks) { 

     if ([akey hasPrefix:testString]) { 
      NSLog(@"Key: %@  URL: %@", akey, [bookmarks objectForKey:akey]); 
     } 

    } 

} 

도움 주셔서 감사합니다.

답변

5

코드가 정확하고 더 나은 방법이 있다고 생각하는 것이 옳습니다. 당신은 임시 변수의 수를 줄이고, 작업에 대한 초기화를 선택하여 대신 NSMutableDictionaryNSDictionary을 A (비 변경 가능)를 사용할 수 있습니다 : 모든 코코아 공장 방법처럼,

NSDictionary *bookmarks = [NSDictionary dictionaryWithObjectsAndKeys: 
          [NSURL urlWithString:@"http://www.stanford.edu"], @"Stanford University", 
          [NSURL urlWithString:@"http://www.apple.com"], @"Apple", 
          //...etc..., 
          nil 
          ]; 

참고 -[NSDictionary dictionaryWithObjectsAndKeys:], 인스턴스를 생성 즉 autoreleased입니다. 사전의 소유권을 현재 범위를 벗어나지 않으려면 반환 된 인스턴스 retain을 사용하거나 alloc/initWithObjectsAndKeys:을 사용해야합니다.

할당 (이상하게) 대신 변경 가능한 사전이 필요한 경우 물론 +[NSMutableDictionary dictionaryWithObjectsAndKeys:]을 사용할 수 있습니다.

내가 사용하는 검색의보다 명확한 형식을 선호합니다. 일부는 더 많은 기능 양식을 사용하여, (당신이 10.6 인 경우) 것을 느낄 수 있습니다 더 나은입니다 :

[bookmarks enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop) { 
     if([key hasPrefix:testString]) { NSLog(@"Key: %@ URL: %@", key, value); } 
    }]; 
2

가 나는 또한 (당신이이 나타납니다) 정적 데이터에 대한 PLIST의 사용을 추천 할 것입니다. plist를 정의하면 아주 적은 코드로 NSDictionary에 직접로드 할 수 있습니다.

여기에서 읽을 수 있습니다. Plist to Dictionary

관련 문제