-4

我是 xcode 的新手,我刚刚构建了我的第一个应用程序。基本上它是一堆从数据库中获取值的标签。前几天我的互联网无法正常工作并且没有意识到这一点,我去运行我的应用程序并且标签为空。我想要做的是,如果变量 data 为 nil,则从以前获取值。我想我在教程中看到了一些关于将值放入内存的内容。我要问的可能吗?这是我的一些代码:

NSURL *url = [NSURL URLWithString:@"http://myserver.com/GetData.php"];
        NSData *data = [NSData dataWithContentsOfURL:url options:0 error:nil];
4

3 回答 3

2

是的,您尝试做的事情称为“缓存”。这是一个关于如何为图像完成的教程

如果我要修改您的代码,我会将您服务器中的数据写入“ ~/Library/Caches”中某处的文件中,如果服务器在后续启动时没有响应,我将从该缓存文件中加载以前的数据.

于 2013-07-11T04:19:08.997 回答
0

在您的 .h 文件中

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
{
    NSData * data;
}
@end

在你的 .m 文件中

- (void)viewDidLoad
{
    [super viewDidLoad];

   NSURL *url = [NSURL URLWithString:@"http://myserver.com/GetData.php"];
   data = [NSData dataWithContentsOfURL:url options:0 error:nil];
  [self saveToUserDefaults];
    }

您可以将其存储在 DB 或NSUserDefaults中以将数据保存在 userDefault 中使用此代码

- (void)saveToUserDefaults
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:data forKey:@"data"];
    [defaults synchronize];
    NSLog(@"Dilip Data saved");
}

当您想要返回该数据时,请使用此代码。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSData *data = [defaults dataForKey:@"data"];
NSLog(@"Dilip Data : %@",data);
于 2013-07-11T04:20:09.083 回答
0

是的,这是可能的。您需要将此数据存储到本地。XCode 只是一个开发工具,因此它不会为您存储数据。您必须将数据存储到文档目录中的某个文件中。可能正在使用SQLite数据库或.plist文件或NSUserDefaults.

对于 SQLIte,教程很少: http://www.raywenderlich.com/902/sqlite-101-for-iphone-developers-creating-and-scripting http://www.tutorialspoint.com/ios/ios_sqlite_database.htm

您可以通过 googleing 找到更多信息。

对于使用 .plist http://www.theappcodeblog.com/2011/07/18/iphone-development-tutorial-create-a-plist-programmatically-after-user-action/

对于 NSUserDefaults

[[NSUserDefaults standardUserDefaults] setObject:yourData forKey:@"data"];
[[NSUserDefaults standardUserDefaults] synchronize];

无论您采用哪种方式,请确保在收到新值后删除旧值。如果由于任何原因您没有获得新值,您可以尝试自己重新更正,也可以从本地存储中获取值。

我通常更喜欢.plist临时使用。因为您不需要长时间使用数据。也是NSUserDefaultsios 级别的商店,我不喜欢大规模使用它,但这是我的偏好。你可以选择其中任何一个。

希望这可以帮助 :)

于 2013-07-11T04:26:59.650 回答