2011-02-27 5 views
4

NSUserDefaults에 배열을 저장하는 방법은 무엇입니까? 시도가 아닌 속성을 삽입 : [: forKey : NSUserDefaults setObject를가] -NSUserDefaults에 배열 저장

나는 내가

경고를 다음 NSURLs

NSArray *temp = [[NSArray alloc] initWithArray:[mySingleton sharedMySingleton].sharedURLS]; 
NSUserDefaults *defs = [NSUserDefaults standardUserDefaults]; 
[defs setObject:temp forKey:@"URLs"]; 

의 배열을 저장하려고 코드 있지만를 얻을 수있다 값

NSURLS 또는 컬렉션을 저장하는 올바른 방법은 무엇입니까?

답변

10

직접 저장할 수없는 NSURLNSUserDefaults에서 만 NSData, NSString, NSNumber, NSDate, NSArray, 또는 NSDictionary; 또한 NSArray 또는 NSDictionary에는 이러한 유형의 개체 만 포함될 수 있습니다. NSURL을 이러한 유형 중 하나로 변환해야합니다. 대부분 absoluteString을 사용하여 NSString으로 변환해야합니다.

+0

대단히 감사합니다. 그래서 NSString 표현의리스트를 저장하면 URL을 사용하여 자산에 액세스 할 수 있도록 문자열을 읽은 후 어떻게 URL을 가져올 수 있습니까? – jarryd

+1

'[NSURL URLWithString : string]' – Anomie

+0

고마워요. URL에서 ALAsset을 생성 할 수 있습니까? 내가 이렇게하면 NSURL * url = [[NSURL alloc] initWithString : [urlStrings objectAtIndex : i]]; \t \t ALAsset * tAsset = [[ALAsset alloc] initWithContentsOfURL : url]; 알 수없는 셀렉터로 인해 initWithContentsOfURL에 전송 된 크래시가 발생했습니다. – jarryd

0

이 문제는 [mySingleton sharedMySingleton].sharedURLS과 함께 있습니다. NSURL은 NSURL 클래스에 적어도 NSUserDefaults에 저장할 수 없습니다. NSURL 클래스는 속성 목록 객체가 아닙니다 (아래 설명 참조). 그래서 같이 NSStrings에 URL을 변환 한 후 NSUserDefaults에 배치 추천 :

NSString *urlString = [url absoluteString];

문제가있는 개체가 그 프로그래머 넣어 다른 사용자가 여기에 있었다 유사한 문제 (NSUserDefaults won't save NSDictionary),있다 NSDictionary (이 경우, NSArray)에있는 속성 목록 개체가 아닙니다. 기본적으로 속성 목록 객체는 NSData, NSString, NSNumber, NSDate, NSArray 또는 NSDictionary와 같은 항목으로 NSUserDefaults에 저장하는 데 필요한 형식입니다.

0
if you want save Object Like Array ,So you use Archived Class 

    NSArray *temp = [[NSArray alloc] initWithArray:[mySingleton sharedMySingleton].sharedURLS]; 
    [[NSUserDefaults standardUserDefaults]setObject:[NSKeyedArchiver archivedDataWithRootObject:temp] forKey:@"URLs"]; 

you also need coder and decoder method for this. 
    This is Working Fine For Me. 
관련 문제