2012-07-24 4 views
1

안녕하세요 :)Objective C에서 개체를 저장할 수 있지만 덮어 쓸 수는 없습니까?

내가 NSUserDefaults을 시도하지만 난 개체를 추가 할 때, 그것은 덮어 쓰게됩니다

내가 객체를 저장하지만, 목표 C에서 덮어 쓸 수 없습니다 어떻게

!

난 내 응용 프로그램 또는 즐겨 찾기에 즐겨 찾기를 만들려고하고 있기 때문에 내가,이를 방지 할 수있는 방법

,

하지만 난 내가 저장하려고 이러한 개체를 저장하는 방법을 모르겠어요.

이것은 저장하려고하는 경우입니다.

NSUserDefaults *favorite = [NSUserDefaults standardUserDefaults]; 

[favorite setObject:saveTip forKey:@"saveTipFavorite"]; 

[favorite synchronize]; 

하지만 내 앱에서 즐겨 찾기 버튼에 추가 할 때마다 덮어 씁니다.

그리고 덮어 쓰지 않고 새로운 개체를 만들어 추가하고 싶습니다.

나는 당신이 나를 이해하기를 바랍니다. :)

답변

0

저장할 개체는 배열이 될 수 있습니다. 팁을 저장하고 객체가 NSUserDefaults에 주어 지도록 배열을 만듭니다.

2

키 당 하나의 개체 만있을 수 있으므로 덮어 쓰고 있으며 매번 변경합니다. 원하는 것은 단일 객체 대신 배열을 저장하고이를 사용자 기본값의 키로 설정하는 것입니다.

초기화 : 사용자 기본값은 불변 (NSArray) 버전을 저장할 수 있기 때문에 우리가 NSMutableArrayNSArray에서 변환하는

NSMutableArray *objectArray; 
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults]; 
NSArray *oldSavedArray = [currentDefaults objectForKey:@"savedArray"]; 
if (oldSavedArray != nil) 
    objectArray = [[NSMutableArray alloc] initWithArray:oldSavedArray]; 
else 
    objectArray = [[NSMutableArray alloc] init]; 

알 수 있습니다.

그런 다음 항목 추가 :이 뭔가 당신이 많은 (데이터의 톤)하고있을 것입니다 경우

[objectArray addObject:whatever]; 
[currentDefaults setObject:objectArray forKey:@"savedArray"]; 

를 대신 코어 데이터를 사용하여 고려할 수 있습니다, 더 빨리 될 것입니다. NSUserDefaults은 실제로 무거운 데이터를 저장하기위한 것이 아닙니다.

+0

NSMutableArray는 NSArray의 서브 클래스이므로 마지막 변환이 필요하지 않습니다. '-setObject : forKey :'는 변경 가능한 배열을 괜찮게 받아 들일 것입니다 (당연히 immutably 저장되고 일반 NSArray로 돌아올 것입니다). – andyvn22

+0

좋은 지적, 고마워. – Dima

+0

고맙다. 나에게 매우 도움이되었다. :) –

0

NSUserDefaults는 간단한 항목에 적합하지만 앱이 많은 양의 데이터를 처리하게하려면 CoreData을 시작해야합니다.

http://developer.apple.com/library/mac/#documentation/cocoa/Conceptual/CoreData/cdProgrammingGuide.html

은 또한 쉽게 데이터를 조작하는 것, 당신의 구원의 문제를 해결할뿐만 아니라이.

+0

내 응용 프로그램은 웹에서 팁을 보여주는 팁 앱 일 뿐이다. 객체에 이름, 설명, 타임 스탬프가 들어있다. NSUserDefaults를 사용하거나 너무 많이 사용할 수 있는가? 데이터. :) –

+0

당신은 NSUserDefaults로 가는게 좋을 것입니다. 여러 객체를 포함해야하고 같은 유형의 객체를 두 개 이상 포함해야하는 경우 핵심 데이터를 제안했습니다.Coredata는 가파른 학습 곡선을 가지고 있으므로, 다음 큰 프로젝트에서이를 염두에 두시기 바랍니다. – scord

+0

예, 감사합니다. :) –