PersistenceViewController.m
上传用户:jjjjag8
上传日期:2017-04-17
资源大小:1443k
文件大小:4k
源码类别:

iPhone

开发平台:

MultiPlatform

  1. //
  2. //  PersistenceAppDelegate.m
  3. //  Persistence
  4. //
  5. //  Created by Jeff LaMarche on 7/29/08.
  6. //  Copyright __MyCompanyName__ 2008. All rights reserved.
  7. //
  8. #import "PersistenceViewController.h"
  9. #import "FourLines.h"
  10. @implementation PersistenceViewController
  11. @synthesize field1;
  12. @synthesize field2;
  13. @synthesize field3;
  14. @synthesize field4;
  15. - (NSString *)dataFilePath
  16. {
  17. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  18. NSString *documentsDirectory = [paths objectAtIndex:0];
  19. return [documentsDirectory stringByAppendingPathComponent:kFilename];
  20. }
  21. - (void)applicationWillTerminate:(NSNotification *)notification
  22. {
  23. // FourLines *fourLines = [[FourLines alloc] init];
  24. // fourLines.field1 = field1.text;
  25. // fourLines.field2 = field2.text;
  26. // fourLines.field3 = field3.text;
  27. // fourLines.field4 = field4.text;
  28. //
  29. // NSMutableData *data = [[NSMutableData alloc] init];
  30. // NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
  31. // [archiver encodeObject:fourLines forKey:kDataKey];
  32. // [archiver finishEncoding];
  33. // [data writeToFile:[self dataFilePath] atomically:YES];
  34. // [fourLines release];
  35. // [archiver release];
  36. // [data release];
  37. for (int i = 1; i <= 4; i++)
  38. {
  39. NSString *fieldName = [[NSString alloc] initWithFormat:@"field%d", i];
  40. UITextField *field = [self valueForKey:fieldName];
  41. NSString *update = [[NSString alloc] initWithFormat:@"INSERT OR REPLACE INTO FIELDS (ROW, FIELD_DATA) VALUES (%d, '%@');", i, field.text];
  42. char * errorMsg;
  43. if (sqlite3_exec (database, [update UTF8String], NULL, NULL, &errorMsg) != SQLITE_OK)
  44. {
  45. NSAssert1(0, @"Error updating tables: %s", errorMsg);
  46. }
  47. }
  48. sqlite3_close(database);
  49. }
  50. #pragma mark -
  51. - (void)viewDidLoad {
  52. if (sqlite3_open([[self dataFilePath] UTF8String], &database) != SQLITE_OK) {
  53. sqlite3_close(database);
  54. NSAssert(0, @"Failed to open database");
  55. }
  56. char *errorMsg;
  57. NSString *createSQL = @"CREATE TABLE IF NOT EXISTS FIELDS (ROW INTEGER PRIMARY KEY, FIELD_DATA TEXT);";
  58. if (sqlite3_exec (database, [createSQL  UTF8String], NULL, NULL, &errorMsg) != SQLITE_OK) {
  59. sqlite3_close(database);
  60. NSAssert1(0, @"Error creating table: %s", errorMsg);
  61. }
  62. NSString *query = @"SELECT ROW, FIELD_DATA FROM FIELDS ORDER BY ROW";
  63. sqlite3_stmt *statement;
  64. if (sqlite3_prepare_v2( database, [query UTF8String], -1, &statement, nil) == SQLITE_OK) {
  65. while (sqlite3_step(statement) == SQLITE_ROW) {
  66. int row = sqlite3_column_int(statement, 0);
  67. char *rowData = (char *)sqlite3_column_text(statement, 1);
  68. NSString *fieldName = [[NSString alloc] initWithFormat:@"field%d", row];
  69. NSString *fieldValue = [[NSString alloc] initWithUTF8String:rowData];
  70. UITextField *field = [self valueForKey:fieldName];
  71. field.text = fieldValue;
  72. [fieldName release];
  73. [fieldValue release];
  74. }
  75. }
  76. UIApplication *app = [UIApplication sharedApplication];
  77. [[NSNotificationCenter defaultCenter] addObserver:self
  78.  selector:@selector(applicationWillTerminate:)
  79.  name:UIApplicationWillTerminateNotification 
  80.    object:app];
  81. [super viewDidLoad];
  82. }
  83. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
  84. // Return YES for supported orientations
  85. return (interfaceOrientation == UIInterfaceOrientationPortrait);
  86. }
  87. - (void)didReceiveMemoryWarning {
  88. [super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
  89. // Release anything that's not essential, such as cached data
  90. }
  91. - (void)dealloc {
  92. [field1 release];
  93. [field2 release];
  94. [field3 release];
  95. [field4 release];
  96. [super dealloc];
  97. }
  98. @end