2011-02-06 7 views
0

저는 Cocoa 개발자가 아니지만 PhoneGap 용 플러그인을 만들기 위해 애 쓰고 있습니다. 이 특정 플러그인 방법은 1) 이유를 말하지 않고 응용 프로그램을 중단하거나 2) 내가 객체를 해제하거나 해제하지 않는 것에 대해 불평하는 것입니다. for 루프 대신에 Enumerator를 사용하는 것을 포함하여 많은 일을 시도했습니다. 누군가가 올바른 방향으로 나를 가리킬 수 있다면 그것은 굉장 할 것입니다.NSMutableDictionary를 생성하고 채울 때 메모리 오류가 발생했습니다.

- (void)getPreferences:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options { 
    NSUInteger argc = [arguments count]; 
    NSString* jsCallback = nil; 

    if (argc > 0) { 
     jsCallback = [arguments objectAtIndex:0]; 
    } else { 
     NSLog(@"Preferences.getPreferences: Missing 1st parameter."); 
     return; 
    } 

    NSDictionary *defaults = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]; 
    NSMutableArray *keys = (NSMutableArray *) [options objectForKey:@"keys"]; 
    NSMutableDictionary *values = [[NSMutableDictionary alloc] init]; 

    NSUInteger ky = [keys count]; 
    for (int i = 0; i < ky; i ++) { 
     @try { 

      [values setObject:[defaults objectForKey:[keys objectAtIndex:i]] forKey:[keys objectAtIndex:i]]; 
     } 
     @catch (NSException * err) { 
      NSLog(@"Error %@", err); 
     } 
    } 

    [keys release]; 

    NSString* jsString = [[NSString alloc] initWithFormat:@"%@(%@);", jsCallback, [values JSONRepresentation]]; 

    [defaults release]; 
    [values release]; 

    [webView stringByEvaluatingJavaScriptFromString:jsString]; 

    [jsString release]; 
} 

인간 버전 :

  1. options 키가가는 문자열 배열을 (포함 "키"
  2. 의 단일 키 사전을 포함 나는 취재 상관 없어 defaults F에 존재하는 모든 값 및 그 배열
  3. 통하여 조회를위한 키)
  4. I는 루프 원하는대로 사용될 그 키를 복사하여 같은 키를 사용하여 복사
  5. 마지막으로, values을 JSON으로 다시 보내고 싶습니다. (이 부분은 전체 defaults 개체를 전달했을 때 작동 했으므로 JSON 메서드가 작동한다고 생각합니다) 코드에서
+0

완전히 주제에서 벗어난 무언가 당신을 귀찮게하지만이 일이 할 죄송합니다 다운로드 사이트의 뉴스? 어딘가에 거울이 있니? 나는 그것을 가리키는 여러 게시물을 가지고 있으며 대신 github 프로필에 링크하도록 편집했습니다. 그게 지금 제일 좋은 곳인가요? –

+0

@Pekka, 예, 잠시. 새로운 집은 아마도 labs.dougneiner.com/downloadify에있을 것입니다. 나는 이름을 갱신하지 않은 바보처럼 느껴진다 ... 내가 할 때까지, 그것은 너무 늦은 며칠이었다. #fail –

답변

2

는, 당신이 '소유'하는 것이 다음 당신이 그들을 해제하고 다른해서는 안, valuesjsString (당신이 alloc로 만든 것)를 객체.
메모리 관리에 대한 자세한 내용은 here을 참조하십시오.

전체 코드입니까? 또한, 정확히 어떤 오류가 있습니까?

+0

+1 와우, 다른 두 개의 출시 전화를 삭제하면 해결됩니다. 또한, 그것을 소유하는 개념은 나에게 의미가있었습니다. 빠른 응답을 주셔서 감사합니다! –

+1

@Doug 내가 추가 한 링크는 일반적인 개념을 이해하는 데 도움이됩니다. 간단하지만 명확합니다. 행운을 빕니다 :) –

1

Nikita가 맞습니다. 자동 복구 풀이 해제 될 때 나중에 크래시가 발생하는 defaults을 다시 덮어 쓰는 것처럼 보입니다. 난 당신이 정확하게 뭘 하려는지 이해하는 경우 또한, 당신은 단 한 줄의 코드로 values 사전을 만들 수 있습니다

NSDictionary *values = [defaultsDict dictionaryWithValuesForKeys:keys]; 
+0

네, 정확히 내가 원하는 것. 와우, 그건 내가 생각했던 것보다 쉬웠다. 고맙습니다! +1 –

관련 문제