我制作了一个使用SQLite数据库的iphone应用程序,该数据库预先填充了问题/答案。每次我想纠正/向数据库添加问题时,我都必须更新应用程序并将其提交给Apple。我刚刚开始了解一些JAX-RS API,我已经用REST提出问题等,并将它们作为XML公开。所以我现在想要的是使用来自网络而不是固定数据库的数据,但我有一些问题:
可能是一些愚蠢的问题,但我之前没有做太多的网络服务,所以我有任何帮助,虽然会很有用:=)
答案 0 :(得分:0)
缺陷:
如果你想在你的应用程序图标(称为“徽章”)中显示带有数字的“红球”(在这种情况下,更新的数量),你应该使用通知,你需要在您的站点数据库中注册客户端标识符,并且每次有更新时,您都应该通知每个客户端。这不是微不足道的,我相信你应该首先实现应用程序搜索数据的解决方案,然后再采取相反的方式。
如果您想了解有关通知的更多信息,可以使用:
请注意,这不是一成不变的。还有其他方法(无论如何应该),但这是我在需要更新客户端数据库时使用的工作流程。
希望它指出你正确的方向。随意要求澄清(如果需要)。
答案 1 :(得分:0)
答案:
- 是的,这是一种很好的工作方式,你可以使用网页上传最新的 数据。你可以用两种方式做到这一点:
1)上传新问题并将其添加到现有的sqlite中 适合您应用的数据库。但你应该知道,那个数据库 必须放在Documents目录而不是您的应用程序中 束。您可以在此处查看示例代码。
BOOL success;
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"db.sqlite"];
self.imagesPath = [documentsDirectory stringByAppendingPathComponent:@"images"];
//Check if you have local copy of your database
if (![fileManager fileExistsAtPath:imagesPath])
{
NSError *error;
if (![fileManager createDirectoryAtPath:imagesPath withIntermediateDirectories:YES
attributes:NULL error:&error])
{
NSAssert1(0, @"Error cannot create a directory %@", imagesPath);
}
}
success = [fileManager fileExistsAtPath:writableDBPath];
//If you have no local copy, than copy default database, which you have added to project
//Instead of this you can also download database from internet.
if (!success)
{
// The writable database does not exist, so copy the default to the appropriate location.
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"db.sqlite"];
success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];
if (!success) {
NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
}
}
2)您可以下载整个sqlite数据库并替换现有数据库。它' S 很容易,但请记住,你应该使用更多 在这种情况下的流量。