广

IOS开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    以代码实例总结iOS应用开发中数据的存储方式

    2018-04-05 08:32:07 次阅读 稿源:互联网
    广告

    ios数据存储包括以下几种存储机制:

    • 属性列表
    • 对象归档
    • SQLite3
    • CoreData
    • AppSettings
    • 普通文件存储

    1、属性列表
    代码如下:

    // 
    //  Persistence1ViewController.h 
    //  Persistence1 
    // 
    //  Created by liu lavy on 11-10-3. 
    //  Copyright 2011 __MyCompanyName__. All rights reserved. 
    // 
     
    #import <UIKit/UIKit.h> 
    #define kFilename @"data.plist" 
     
    @interface Persistence1ViewController : UIViewController { 
        UITextField *filed1; 
        UITextField *field2; 
        UITextField *field3; 
        UITextField *field4; 

    @property (nonatomic, retain) IBOutlet UITextField *field1; 
    @property (nonatomic, retain) IBOutlet UITextField *field2; 
    @property (nonatomic, retain) IBOutlet UITextField *field3; 
    @property (nonatomic, retain) IBOutlet UITextField *field4; 
     
    - (NSString *)dataFilePath; 
    - (void)applicationWillResignActive:(NSNotification *)notification; 
     
    @end 

    代码如下:

    // 
    //  Persistence1ViewController.m 
    //  Persistence1 
    // 
    //  Created by liu lavy on 11-10-3. 
    //  Copyright 2011 __MyCompanyName__. All rights reserved. 
    // 
     
    #import "Persistence1ViewController.h" 
     
    @implementation Persistence1ViewController 
    @synthesize field1; 
    @synthesize field2; 
    @synthesize field3; 
    @synthesize field4; 
     
    //数据文件的完整路径 
    - (NSString *)dataFilePath { 
        //检索Documents目录路径。第二个参数表示将搜索限制在我们的应用程序沙盒中 
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
        //每个应用程序只有一个Documents目录 
        NSString *documentsDirectory = [paths objectAtIndex:0]; 
        //创建文件名 
        return [documentsDirectory stringByAppendingPathComponent:kFilename]; 

     
    //应用程序退出时,将数据保存到属性列表文件 
    - (void)applicationWillResignActive:(NSNotification *)notification { 
        NSMutableArray *array = [[NSMutableArray alloc] init]; 
        [array addObject: field1.text]; 
        [array addObject: field2.text]; 
        [array addObject: field3.text]; 
        [array addObject: field4.text]; 
        [array writeToFile:[self dataFilePath] atomically:YES]; 
        [array release]; 

     
    /*
    // The designated initializer. Override to perform setup that is required before the view is loaded.
    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            // Custom initialization
        }
        return self;
    }
    */ 
     
    /*
    // Implement loadView to create a view hierarchy programmatically, without using a nib.
    - (void)loadView {
    }
    */ 
     
     
     
    // Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
    - (void)viewDidLoad { 
        [super viewDidLoad]; 
        NSString *filePath = [self dataFilePath]; 
        //检查数据文件是否存在 
        if([[NSFileManager defaultManager] fileExistsAtPath:filePath]) { 
            NSArray *array = [[NSArray alloc] initWithContentsOfFile:filePath]; 
            field1.text = [array objectAtIndex:0]; 
            field2.text = [array objectAtIndex:1]; 
            field3.text = [array objectAtIndex:2]; 
            field4.text = [array objectAtIndex:3]; 
            [array release]; 
        } 
        UIApplication *app = [UIApplication sharedApplication]; 
        [[NSNotificationCenter defaultCenter] addObserver:self 
                                                selector:@selector(applicationWillResignActive:) 
                                                name:UIApplicationWillResignActiveNotification 
                                                object:app]; 
        [super viewDidLoad]; 

     
     
    /*
    // Override to allow orientations other than the default portrait orientation.
    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
        // Return YES for supported orientations
        return (interfaceOrientation == UIInterfaceOrientationPortrait);
    }
    */ 
     
    - (void)didReceiveMemoryWarning { 
        // Releases the view if it doesn't have a superview. 
        [super didReceiveMemoryWarning]; 
         
        // Release any cached data, images, etc that aren't in use. 

     
    - (void)viewDidUnload { 
        self.field1 = nil; 
        self.field2 = nil; 
        self.field3 = nil; 
        self.field4 = nil; 
        [super viewDidUnload]; 

     
     
    - (void)dealloc { 
        [field1 release]; 
        [field2 release]; 
        [field3 release]; 
        [field4 release]; 
        [super dealloc]; 

     
    @end 

    2、对象归档
    代码如下:

    // 
    //  Fourlines.h 
    //  Persistence2 
    // 
    //  Created by liu lavy on 11-10-3. 
    //  Copyright 2011 __MyCompanyName__. All rights reserved. 
    // 
     
    #import <Foundation/Foundation.h> 
     
    @interface Fourlines : NSObject <NSCoding, NSCopying> { 
        NSString *field1; 
        NSString *field2; 
        NSString *field3; 
        NSString *field4; 

    @property (nonatomic, retain) NSString *field1; 
    @property (nonatomic, retain) NSString *field2; 
    @property (nonatomic, retain) NSString *field3; 
    @property (nonatomic, retain) NSString *field4; 
     

    @end 

    代码如下:

    // 
    //  Fourlines.m 
    //  Persistence2 
    // 
    //  Created by liu lavy on 11-10-3. 
    //  Copyright 2011 __MyCompanyName__. All rights reserved. 
    // 
     
    #import "Fourlines.h" 
     
    #define kField1Key @"Field1" 
    #define kField2Key @"Field2" 
    #define kField3Key @"Field3" 
    #define kField4Key @"Field4" 
     
    @implementation Fourlines 
    @synthesize field1; 
    @synthesize field2; 
    @synthesize field3; 
    @synthesize field4; 
     
    #pragma mark NSCoding 
    - (void)encodeWithCoder:(NSCoder *)aCoder { 
        [aCoder encodeObject:field1 forKey:kField1Key]; 
        [aCoder encodeObject:field2 forKey:kField2Key]; 
        [aCoder encodeObject:field3 forKey:kField3Key]; 
        [aCoder encodeObject:field4 forKey:kField4Key]; 

     
    -(id) initWithCoder:(NSCoder *)aDecoder { 
        if(self = [super init]) { 
            field1 = [[aDecoder decodeObjectForKey:kField1Key] retain]; 
            field2 = [[aDecoder decodeObjectForKey:kField2Key] retain]; 
            field3 = [[aDecoder decodeObjectForKey:kField3Key] retain]; 
            field4 = [[aDecoder decodeObjectForKey:kField4Key] retain]; 
        } 
        return self; 

     
    #pragma mark - 
    #pragma mark NSCopying 
    - (id) copyWithZone:(NSZone *)zone { 
        Fourlines *copy = [[[self class] allocWithZone: zone] init]; 
        copy.field1 = [[self.field1 copyWithZone: zone] autorelease]; 
        copy.field2 = [[self.field2 copyWithZone: zone] autorelease]; 
        copy.field3 = [[self.field3 copyWithZone: zone] autorelease]; 
        copy.field4 = [[self.field4 copyWithZone: zone] autorelease]; 
        return copy; 

    @end 

    代码如下:

    // 
    //  Persistence2ViewController.h 
    //  Persistence2 
    // 
    //  Created by liu lavy on 11-10-3. 
    //  Copyright 2011 __MyCompanyName__. All rights reserved. 
    // 
     
    #import <UIKit/UIKit.h> 
    #define kFilename @"archive" 
    #define kDataKey @"Data" 
     
    @interface Persistence2ViewController : UIViewController { 
        UITextField *filed1; 
        UITextField *field2; 
        UITextField *field3; 
        UITextField *field4; 

    @property (nonatomic, retain) IBOutlet UITextField *field1; 
    @property (nonatomic, retain) IBOutlet UITextField *field2; 
    @property (nonatomic, retain) IBOutlet UITextField *field3; 
    @property (nonatomic, retain) IBOutlet UITextField *field4; 
     
    - (NSString *)dataFilePath; 
    - (void)applicationWillResignActive:(NSNotification *)notification; 
     
    @end 

    代码如下:

    // 
    //  Persistence2ViewController.m 
    //  Persistence2 
    // 
    //  Created by liu lavy on 11-10-3. 
    //  Copyright 2011 __MyCompanyName__. All rights reserved. 
    // 
     
    #import "Persistence2ViewController.h" 
    #import "Fourlines.h" 
     
    @implementation Persistence2ViewController 
    @synthesize field1; 
    @synthesize field2; 
    @synthesize field3; 
    @synthesize field4; 
     
    //数据文件的完整路径 
    - (NSString *)dataFilePath { 
        //检索Documents目录路径。第二个参数表示将搜索限制在我们的应用程序沙盒中 
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
        //每个应用程序只有一个Documents目录 
        NSString *documentsDirectory = [paths objectAtIndex:0]; 
        //创建文件名 
        return [documentsDirectory stringByAppendingPathComponent:kFilename]; 

     
    //应用程序退出时,将数据保存到属性列表文件 
    - (void)applicationWillResignActive:(NSNotification *)notification { 
        Fourlines *fourlines = [[Fourlines alloc] init]; 
        fourlines.field1 = field1.text; 
        fourlines.field2 = field2.text; 
        fourlines.field3 = field3.text; 
        fourlines.field4 = field4.text; 
         
        NSMutableData *data = [[NSMutableData alloc] init];//用于存储编码的数据 
        NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; 
         
        [archiver encodeObject:fourlines forKey:kDataKey]; 
        [archiver finishEncoding]; 
        [data writeToFile:[self dataFilePath] atomically:YES]; 
         
        [fourlines release]; 
        [archiver release]; 
        [data release]; 

     
    /*
     // The designated initializer. Override to perform setup that is required before the view is loaded.
     - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
     if (self) {
     // Custom initialization
     }
     return self;
     }
     */ 
     
    /*
     // Implement loadView to create a view hierarchy programmatically, without using a nib.
     - (void)loadView {
     }
     */ 
     
     
     
    // Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
    - (void)viewDidLoad { 
        [super viewDidLoad]; 
        NSString *filePath = [self dataFilePath]; 
        //检查数据文件是否存在 
        if([[NSFileManager defaultManager] fileExistsAtPath:filePath]) { 
             
            //从文件获取用于解码的数据 
            NSData *data = [[NSMutableData alloc] initWithContentsOfFile:[self dataFilePath]]; 
            NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; 
             
            Fourlines *fourlines = [unarchiver decodeObjectForKey:kDataKey]; 
            [unarchiver finishDecoding]; 
             
            field1.text = fourlines.field1; 
            field2.text = fourlines.field2; 
            field3.text = fourlines.field3; 
            field4.text = fourlines.field4; 
             
            [unarchiver release]; 
            [data release]; 
        } 
        UIApplication *app = [UIApplication sharedApplication]; 
        [[NSNotificationCenter defaultCenter] addObserver:self 
                                                 selector:@selector(applicationWillResignActive:) 
                                                 name:UIApplicationWillResignActiveNotification 
                                                 object:app]; 
        [super viewDidLoad]; 

     
     
    /*
     // Override to allow orientations other than the default portrait orientation.
     - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     // Return YES for supported orientations
     return (interfaceOrientation == UIInterfaceOrientationPortrait);
     }
     */ 
     
    - (void)didReceiveMemoryWarning { 
        // Releases the view if it doesn't have a superview. 
        [super didReceiveMemoryWarning]; 
         
        // Release any cached data, images, etc that aren't in use. 

     
    - (void)viewDidUnload { 
        self.field1 = nil; 
        self.field2 = nil; 
        self.field3 = nil; 
        self.field4 = nil; 
        [super viewDidUnload]; 

     
     
    - (void)dealloc { 
        [field1 release]; 
        [field2 release]; 
        [field3 release]; 
        [field4 release]; 
        [super dealloc]; 

    @end 

    3、SQLite
    代码如下:

    // 
    //  Persistence3ViewController.h 
    //  Persistence3 
    // 
    //  Created by liu lavy on 11-10-3. 
    //  Copyright 2011 __MyCompanyName__. All rights reserved. 
    // 
     
    #import <UIKit/UIKit.h> 
    #define kFilename @"data.sqlite3" 
     
    @interface Persistence3ViewController : UIViewController { 
        UITextField *filed1; 
        UITextField *field2; 
        UITextField *field3; 
        UITextField *field4; 

    @property (nonatomic, retain) IBOutlet UITextField *field1; 
    @property (nonatomic, retain) IBOutlet UITextField *field2; 
    @property (nonatomic, retain) IBOutlet UITextField *field3; 
    @property (nonatomic, retain) IBOutlet UITextField *field4; 
     
    - (NSString *)dataFilePath; 
    - (void)applicationWillResignActive:(NSNotification *)notification; 
    @end 

    代码如下:

    // 
    //  Persistence3ViewController.m 
    //  Persistence3 
    // 
    //  Created by liu lavy on 11-10-3. 
    //  Copyright 2011 __MyCompanyName__. All rights reserved. 
    // 
     
    #import "Persistence3ViewController.h" 
    #import <sqlite3.h> 
     
    @implementation Persistence3ViewController 
    @synthesize field1; 
    @synthesize field2; 
    @synthesize field3; 
    @synthesize field4; 
     
    //数据文件的完整路径 
    - (NSString *)dataFilePath { 
        //检索Documents目录路径。第二个参数表示将搜索限制在我们的应用程序沙盒中 
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
        //每个应用程序只有一个Documents目录 
        NSString *documentsDirectory = [paths objectAtIndex:0]; 
        //创建文件名 
        return [documentsDirectory stringByAppendingPathComponent:kFilename]; 

     
    //应用程序退出时,将数据保存到属性列表文件 
    - (void)applicationWillResignActive:(NSNotification *)notification { 
        sqlite3 *database; 
        if(sqlite3_open([[self dataFilePath] UTF8String], &database) != SQLITE_OK) { 
            sqlite3_close(database); 
            NSAssert(0, @"Failed to open database"); 
        } 
         
        for(int i = 1; i <= 4; i++) { 
            NSString *fieldname = [[NSString alloc] initWithFormat:@"field%d", i]; 
            UITextField *field = [self valueForKey:fieldname]; 
            [fieldname release]; 
             
            char *update = "INSERT OR REPLACE INTO FIELDS (ROW, FIELD_DATA) VALUES (?, ?);"; 
            sqlite3_stmt *stmt; 
            //将SQL语句编译为sqlite内部一个结构体(sqlite3_stmt),类似java JDBC的PreparedStatement预编译 
            if (sqlite3_prepare_v2(database, update, -1, &stmt, nil) == SQLITE_OK) { 
                //在bind参数的时候,参数列表的index从1开始,而取出数据的时候,列的index是从0开始 
                sqlite3_bind_int(stmt, 1, i); 
                sqlite3_bind_text(stmt, 2, [field.text UTF8String], -1, NULL); 
            } else { 
                NSAssert(0, @"Error:Failed to prepare statemen"); 
            } 
            //执行SQL文,获取结果  
            int result = sqlite3_step(stmt); 
            if(result != SQLITE_DONE) { 
                NSAssert1(0, @"Error updating table: %d", result); 
            } 
            //释放stmt占用的内存(sqlite3_prepare_v2()分配的) 
            sqlite3_finalize(stmt); 
        } 
        sqlite3_close(database); 

     
    /*
     // The designated initializer. Override to perform setup that is required before the view is loaded.
     - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
     if (self) {
     // Custom initialization
     }
     return self;
     }
     */ 
     
    /*
     // Implement loadView to create a view hierarchy programmatically, without using a nib.
     - (void)loadView {
     }
     */ 
     
     
     
    // Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
    - (void)viewDidLoad { 
        [super viewDidLoad]; 
        NSString *filePath = [self dataFilePath]; 
        //检查数据文件是否存在 
        if([[NSFileManager defaultManager] fileExistsAtPath:filePath]) { 
            //打开数据库 
            sqlite3 *database; 
            if(sqlite3_open([filePath UTF8String], &database) != SQLITE_OK) { 
                sqlite3_close(database); 
                NSAssert(0, @"Failed to open database"); 
            } 
             
            //创建表 
            char *errorMsg; 
            NSString *createSQL =  
                @"CREATE TABLE IF NOT EXISTS FIELDS (ROW INTEGER PRIMARY KEY, FIELD_DATA TEXT);"; 
            if(sqlite3_exec(database, [createSQL UTF8String], NULL, NULL, &errorMsg) != SQLITE_OK) { 
                sqlite3_close(database); 
                NSAssert(0, @"Error creating table: %s", errorMsg); 
            } 
     
            //查询 
            NSString *query = @"SELECT ROW, FIELD_DATA FROM FIELDS ORDER BY ROW"; 
            sqlite3_stmt *statement; 
            //设置nByte可以加速操作 
            if(sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil) == SQLITE_OK) { 
                while (sqlite3_step(statement) == SQLITE_ROW) {//返回每一行 
                    int row = sqlite3_column_int(statement, 0); 
                    char *rowData = (char *)sqlite3_column_text(statement, 1); 
                     
                    NSString *fieldName = [[NSString alloc] initWithFormat:@"field%d", row]; 
                    NSString *fieldValue = [[NSString alloc] initWithUTF8String:rowData]; 
                     
                    UITextField *field = [self valueForKey:fieldName]; 
                    field.text = fieldValue; 
                     
                    [fieldName release]; 
                    [fieldValue release]; 
                } 
                //释放statement占用的内存(sqlite3_prepare()分配的) 
                sqlite3_finalize(statement); 
            } 
            sqlite3_close(database); 
        } 
         
         
        UIApplication *app = [UIApplication sharedApplication]; 
        [[NSNotificationCenter defaultCenter] addObserver:self 
                                                 selector:@selector(applicationWillResignActive:) 
                                                     name:UIApplicationWillResignActiveNotification 
                                                   object:app]; 
        [super viewDidLoad]; 

     
     
    /*
     // Override to allow orientations other than the default portrait orientation.
     - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     // Return YES for supported orientations
     return (interfaceOrientation == UIInterfaceOrientationPortrait);
     }
     */ 
     
    - (void)didReceiveMemoryWarning { 
        // Releases the view if it doesn't have a superview. 
        [super didReceiveMemoryWarning]; 
         
        // Release any cached data, images, etc that aren't in use. 

     
    - (void)viewDidUnload { 
        self.field1 = nil; 
        self.field2 = nil; 
        self.field3 = nil; 
        self.field4 = nil; 
        [super viewDidUnload]; 

     
     
    - (void)dealloc { 
        [field1 release]; 
        [field2 release]; 
        [field3 release]; 
        [field4 release]; 
        [super dealloc]; 

     
    @end 

    4、Core Data
    代码如下:

    // 
    //  PersistenceViewController.h 
    //  Persistence4 
    // 
    //  Created by liu lavy on 11-10-3. 
    //  Copyright 2011 __MyCompanyName__. All rights reserved. 
    // 
     
    #import <UIKit/UIKit.h> 
     
     
    @interface PersistenceViewController : UIViewController { 
        UITextField *filed1; 
        UITextField *field2; 
        UITextField *field3; 
        UITextField *field4; 

    @property (nonatomic, retain) IBOutlet UITextField *field1; 
    @property (nonatomic, retain) IBOutlet UITextField *field2; 
    @property (nonatomic, retain) IBOutlet UITextField *field3; 
    @property (nonatomic, retain) IBOutlet UITextField *field4; 
     
    @end 

    代码如下:

    // 
    //  PersistenceViewController.m 
    //  Persistence4 
    // 
    //  Created by liu lavy on 11-10-3. 
    //  Copyright 2011 __MyCompanyName__. All rights reserved. 
    // 
     
    #import "PersistenceViewController.h" 
    #import "Persistence4AppDelegate.h" 
     
    @implementation PersistenceViewController 
    @synthesize field1; 
    @synthesize field2; 
    @synthesize field3; 
    @synthesize field4; 
     
     
    -(void) applicationWillResignActive:(NSNotification *)notification { 
        Persistence4AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 
        NSManagedObjectContext *context = [appDelegate managedObjectContext]; 
        NSError *error; 
        for(int i = 1; i <= 4; i++) { 
            NSString *fieldName = [NSString stringWithFormat:@"field%d", i]; 
            UITextField *theField = [self valueForKey:fieldName]; 
             
            //创建提取请求 
            NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
            //创建实体描述并关联到请求 
            NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Line" 
                                                                 inManagedObjectContext:context]; 
            [request setEntity:entityDescription]; 
             
            //设置检索数据的条件 
            NSPredicate *pred = [NSPredicate predicateWithFormat:@"(lineNum = %d)", i]; 
            [request setPredicate:pred]; 
             
            NSManagedObject *theLine = nil; 
            ////检查是否返回了标准匹配的对象,如果有则加载它,如果没有则创建一个新的托管对象来保存此字段的文本 
            NSArray *objects = [context executeFetchRequest:request error:&error]; 
            if(!objects) { 
                NSLog(@"There was an error"); 
            } 
            //if(objects.count > 0) { 
            //  theLine = [objects objectAtIndex:0]; 
            //} else { 
                //创建一个新的托管对象来保存此字段的文本 
                theLine = [NSEntityDescription insertNewObjectForEntityForName:@"Line" 
                                                        inManagedObjectContext:context]; 
                [theLine setValue:[NSNumber numberWithInt:i] forKey:@"lineNum"]; 
                [theLine setValue:theField.text forKey:@"lineText"]; 
            //} 
            [request release]; 
        } 
        //通知上下文保存更改 
        [context save:&error]; 
         

     
    // The designated initializer.  Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. 
    /*
    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            // Custom initialization.
        }
        return self;
    }
    */ 
     
     
    // Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
    - (void)viewDidLoad { 
        Persistence4AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 
         
        NSManagedObjectContext *context = [appDelegate managedObjectContext]; 
        //创建一个实体描述 
        NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Line" inManagedObjectContext:context]; 
        //创建一个请求,用于提取对象 
        NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
        [request setEntity:entityDescription]; 
         
        //检索对象 
        NSError *error; 
        NSArray *objects = [context executeFetchRequest:request error:&error]; 
        if(!objects) { 
            NSLog(@"There was an error!"); 
        } 
        for(NSManagedObject *obj in objects) { 
            NSNumber *lineNum = [obj valueForKey:@"lineNum"]; 
            NSString *lineText = [obj valueForKey:@"lineText"]; 
            NSString *fieldName = [NSString stringWithFormat:@"field%d", [lineNum integerValue]]; 
            UITextField *textField = [self valueForKey:fieldName]; 
            textField.text = lineText; 
        } 
        [request release]; 
         
        UIApplication *app = [UIApplication sharedApplication]; 
        [[NSNotificationCenter defaultCenter] addObserver:self  
                                                 selector:@selector(applicationWillResignActive:)  
                                                     name:UIApplicationWillResignActiveNotification 
                                                   object:app]; 
        [super viewDidLoad]; 

     
    /*
    // Override to allow orientations other than the default portrait orientation.
    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
        // Return YES for supported orientations.
        return (interfaceOrientation == UIInterfaceOrientationPortrait);
    }
    */ 
     
    - (void)didReceiveMemoryWarning { 
        // Releases the view if it doesn't have a superview. 
        [super didReceiveMemoryWarning]; 
         
        // Release any cached data, images, etc. that aren't in use. 

     
    - (void)viewDidUnload { 
        self.field1 = nil; 
        self.field2 = nil; 
        self.field3 = nil; 
        self.field4 = nil; 
        [super viewDidUnload]; 

     
     
    - (void)dealloc { 
        [field1 release]; 
        [field2 release]; 
        [field3 release]; 
        [field4 release]; 
        [super dealloc]; 

     
     
     
    @end 

    5、AppSettings
    代码如下:

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    6、普通文件存储

    这种方式即自己将数据通过IO保存到文件,或从文件读取。

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告