我有一个应用程序,我创建了sqlite数据库并存储在文档目录中。现在我从现有应用程序打开其他应用程序,并且我想访问现有的数据库路径。我怎么能这样做任何人都可以帮助我。我编写下面的代码打开另一个应用程序并调用文档目录。但它获取了错误的文档目录路径。
==============
UIApplication *ourApplication = [UIApplication sharedApplication];
NSString *ourPath = @"POSRetail://";
NSURL *ourURL = [NSURL URLWithString:ourPath];
if ([ourApplication canOpenURL:ourURL])
{
databasePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSLog(@"databasePath : %@",databasePath);
NSString *filePath = [databasePath stringByAppendingPathComponent:@"testapp.sqlite"];
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:filePath];
if(fileExists)
{
NSMutableString *strRecord =[[NSMutableString alloc]init];
//Retrieve the values of database
const char *dbpath = [filePath UTF8String];
if (sqlite3_open(dbpath, &sdatabase) == SQLITE_OK)
{
// NSString *querySQL = [NSString stringWithFormat:@"SELECT * FROM employee"];
// const char *query_stmt = [querySQL UTF8String];
const char *query_stmt = "Select * from info";
sqlite3_stmt *statement;
//const char *query_stmt = "Select * from sqlite_master where type='table'";
NSMutableArray *arrTemp = [[NSMutableArray alloc] init];
if(sqlite3_prepare_v2(sdatabase, query_stmt, -1, &statement, NULL) == SQLITE_OK)
{
while (sqlite3_step(statement)==SQLITE_ROW) {
[arrTemp addObject:[NSString stringWithFormat:@"%s",sqlite3_column_text(statement, 0)]];
[strRecord appendFormat:@"%@,",[NSString stringWithFormat:@"%s",sqlite3_column_text(statement, 0)]];
[arrTemp addObject:[NSString stringWithFormat:@"%s",sqlite3_column_text(statement, 1)]];
[strRecord appendFormat:@" %@,",[NSString stringWithFormat:@"%s",sqlite3_column_text(statement, 1)]];
[arrTemp addObject:[NSString stringWithFormat:@"%s",sqlite3_column_text(statement, 2)]];
[strRecord appendFormat:@" %@,",[NSString stringWithFormat:@"%s",sqlite3_column_text(statement, 2)]];
[arrTemp addObject:[NSString stringWithFormat:@"%s",sqlite3_column_text(statement, 3)]];
[strRecord appendFormat:@" %@\n",[NSString stringWithFormat:@"%s",sqlite3_column_text(statement, 3)]];
}
NSLog(@"arrTemp : %@",arrTemp);
sqlite3_finalize(statement);
}
else
{
NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(sdatabase));
}
sqlite3_close(sdatabase);
}
else
{
sqlite3_close(sdatabase);
NSAssert1(0, @"Failed to open database with message '%s'.", sqlite3_errmsg(sdatabase));
}
}
else
{
NSLog(@"SQLITE DATABASE NOT AVAILABLE");
}
}
else {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Receiver Not Found" message:@"The Receiver App is not installed. It must be installed." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alertView show];
[alertView release];
}
答案 0 :(得分:2)
好像您想要访问其他iOS App
数据,然后来自Apple
Not Possible
由于iOS
应用适用于SandBox Environment
在应用之间共享数据,因此无法通过file system
直接共享数据,但也有一些方法可用于共享数据审核
<强> Custom URL Scheme: 强>
iOS programming
指南现在有一个关于在两者之间传递数据的部分
应用程序让一个应用程序声明某个URL prefix
然后拥有
其他应用引用URL
。对于你的这一点你可以看
这Apple Documentation。 SO
与iOS
相关
这个问题。<强> Good Thread 强>
<强> UIDocumentInteractionController 强>
注意:没有关于越狱的想法{{1}}设备我得到了参考iCloud API:
答案 1 :(得分:2)
目前无法直接访问其他应用程序的数据。 因为每个应用程序都在沙箱环境中运行。
但你能做到,怎么做?
您需要使用iCloud
。您可以在应用程序之间共享存储在iCloud中的数据,因此将数据库文件存储在iCloud中。
<强>参考文献:强>
您可以在此处找到有关iCloud的教程:iCloud Programming
我在这里描述了数据共享:iCloud Data Sharing
答案 2 :(得分:0)
我认为这根本不可能,每个应用程序都在自己的VM中运行,其他应用程序无法访问彼此的数据,除非数据写在SD卡本身的共享空间上。
答案 3 :(得分:0)
您可以越狱您的设备,然后使用一些越狱开发库来为您提供每个应用程序的沙盒文件夹,或者您可以自己迭代Application文件夹。