2014-04-16 2 views
0

가있는 NSMutableArray에 데이터를 저장 내 mainAppDelegate.h :로드하는 방법/여기

#import <UIKit/UIKit.h> 

@interface mainAppDelegate : UIResponder <UIApplicationDelegate> 

@property (strong, nonatomic) UIWindow *window; 
@property NSMutableArray *toDoItems; 

@end 

mainAppDelegate.m :

#import "XYZToDoListViewController.h" 
#import "XYZToDoItem.h" 
#import "XYZAddItemViewController.h" 

@interface XYZToDoListViewController() 
@property NSMutableArray *toDoItems; 
@end 

@implementation XYZToDoListViewController 

- (IBAction)unwindToList:(UIStoryboardSegue *)segue 
{ 
    XYZAddItemViewController *source = [segue sourceViewController]; 
    XYZToDoItem *item = source.toDoItem; 
    if (item != nil) { 
     [self.toDoItems addObject:item]; 
     [self.tableView reloadData]; 
    } 
} 

- (IBAction)clearData:(UIBarButtonItem *)sender; 
{ 
    [self.toDoItems removeAllObjects]; 
    [self.tableView reloadData]; 
} 

- (id)initWithStyle:(UITableViewStyle)style 
{ 
self = [super initWithStyle:style]; 
if (self) { 

} 
return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.toDoItems = [[NSMutableArray alloc] init]; 
    self.navigationController.view.backgroundColor = 
    [UIColor colorWithPatternImage:[UIImage imageNamed:@"bg_full.png"]]; 
    self.tableView.backgroundColor = [UIColor clearColor]; 
    self.tableView.contentInset = UIEdgeInsetsMake(-35, 0, -35, 0); 
} 
@end 
: 나는 코드와 다른 파일, XYZToDoListViewController.m

#import "mainAppDelegate.h" 

@implementation mainAppDelegate 

- (void)applicationWillTerminate:(UIApplication *)application 
{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"toDoItems.plist"]; 
    [self.toDoItems writeToFile:filePath atomically:TRUE]; 
} 
@end 

적어도 이것은 내가 생각하는 것과 관련이 있습니다. 내 기본 프레임 워크는 내가 뒤에서봤을 때이다. this tutorial. 그래서 내가 볼 수 있듯이 .toDoItems라는 NSMutableArray가있다. 응용 프로그램을 종료 할 때 목록을 기억하기를 원합니다 (최소화하지 않고 이미 수행합니다.) 데이터를 저장하는 코드가 있다고 생각하지만 파일이 있는지 확인하기 위해 무엇을 사용해야합니까? 그래서? 그것을 표시하고 응용 프로그램뿐만 아니라 다시 시작할 때이 내 clearData 방법에 영향을 미칠까요?

+0

가능한 중복 [파일에있는 NSMutableArray 쓰기를 다시로드] (http://stackoverflow.com/questions/19594670/로드되지 않았거나 언제 경우 yourArray를 확인할 수있는 방법으로 nsmutablearray-to-a-file-and-load-the-nsmutablearray-from-a-file-comman) –

+0

XYZToDoItem은 매우 복잡합니까 (중첩 된 사용자 정의 객체가 많음)? [NSUserDefault] (http://nshipster.com/nscoding/)에서도 저장할 수 있습니다. – HaneTV

+0

이 질문에 대한 답변을 볼 수 있는지 잘 모르겠습니다. 게시 된 사과 연습을 확인해 보겠습니다. @HaneTV 그들은 그렇지 않습니다. 사용자가 입력 한 텍스트 값. 나는 UserDefault 경로를 망쳐 놓으려고했으나 어떻게 작동 하는지를 잘 모르겠다. –

답변

0

나는 당신이 당신의 응용 프로그램을 다시 시작한 후에도 당신의 NSMutableArray를 저장하고자하는 것처럼 이해했다. 이 코드를 사용하여 NSMutableArray를 NSUserDefaults로 저장할 수 있습니다.

NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults]; 
[defaultsPhoneId setObject:yourArray forKey:@"yourKey"]; 
[defaultsPhoneId synchronize]; 

그리고 다시

yourArray=[[NSMutableArray alloc]initWithArray:[[NSUserDefaults standardUserDefaults]objectForKey:@"yourKey"]]; 

을 걸릴 수 있습니다 그러나 전에 초기화 NSUserDefaults에 저장하는 것을 잊지 말아 방법이다. 그것의

if([yourArray count]==0){ 
//Your array is empty so you have to call it with @"yourKey". (second codes part) 
} 
+0

감사합니다. 이 코드는 코드를 어디에 넣을 지, 그리고 오타가 무엇인지 알게되면 마침내 해결되었습니다. –

+0

@Deannakov 환영합니다. –

0

NSFileManager *fileManager = [NSFileManager defaultManager]; 
if ([fileManager fileExistsAtPath:your_file_path]) 

".. 그리고 만약 그렇다면"나는 파일이 존재하는지 확인하기 위해 무엇을 사용합니까 " 표시 하시겠습니까? "

UITableView 및 UITableViewDataSource에 대한 정보는 0123을 참조하십시오.https://developer.apple.com/library/ios/documentation/uikit/reference/UITableView_Class/Reference/Reference.html

"그리고 응용 프로그램뿐만 아니라 다시 시작할 때이 내 clearData 방법에 영향을 미칠까요?"

clearData은 버튼 동작입니다. 사용자가 버튼 을 탭할 때만 호출됩니다. 응용 프로그램 시작/중지와 연결되지 않습니다.

+0

clearData에 대한 내 생각이 있었다 : 전화가에 저장된 목록을 가지고 있으며, 사용자가 종료, 그래서 정보가 저장됩니다. 응용 프로그램이 다시 열리면 사용자가 데이터를 지운 다음 응용 프로그램을 다시 종료합니다. 이렇게하면 마지막으로 저장된 데이터가 다시 표시됩니까? –

+0

그래서이 논리를 따라하기 위해 간단히 추가했습니다 :'NSFileManager * fileManager = [NSFileManager defaultManager]; if ([fileManager fileExistsAtPath : @ "toDoItems.plist"]) { self.toDoItems = [[NSArray arrayWithContentsOfFile : @ "toDoItems.plist"] init]; 한다} else { 의 self.toDoItems = [있는 NSMutableArray의 ALLOC] INIT]; }'내 'viewDidLoad' 메소드에 .... –

+0

죄송합니다, 잘 모르겠습니다. 여기에 '[self.toDoItems removeAllObjects];' 런타임 배열 만 청소하고 있습니다. 파일은 영향을받지 않습니다. – Avt