Iphone 通过sharedURL传递存档数据
我目前有两个有点类似的应用程序,并正在寻找一种方法,在这两个应用程序之间共享数据。我设置了一个共享url和所有内容,可以毫无问题地从一个应用程序跳到另一个应用程序。当我试图通过url传递数据时,问题就出现了。我在这两个应用程序中都有一个类,它们彼此相同,并且依靠NSKeyedArchiver和decoder对它们进行编码、解码,以及将它们编码为字符串以传递url 通过访问双方,我知道从应用程序1传递到应用程序2的数据是未被污染的,并以应用程序1编码的方式到达。但我似乎无法解码另一边的数据 我在这里对其进行编码:Iphone 通过sharedURL传递存档数据,iphone,objective-c,nsstring,nscoding,Iphone,Objective C,Nsstring,Nscoding,我目前有两个有点类似的应用程序,并正在寻找一种方法,在这两个应用程序之间共享数据。我设置了一个共享url和所有内容,可以毫无问题地从一个应用程序跳到另一个应用程序。当我试图通过url传递数据时,问题就出现了。我在这两个应用程序中都有一个类,它们彼此相同,并且依靠NSKeyedArchiver和decoder对它们进行编码、解码,以及将它们编码为字符串以传递url 通过访问双方,我知道从应用程序1传递到应用程序2的数据是未被污染的,并以应用程序1编码的方式到达。但我似乎无法解码另一边的数据 我在这
NSURL* app2=[NSURL URLWithString:@"app2://"];
if ([[UIApplication sharedApplication] canOpenURL:app2]) {
NSMutableData *data = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:[tableHelper objectAtIndex:[indexPath section]]forKey:@"TempData" ];
[archiver finishEncoding];
NSString* tmp=[[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding ] autorelease];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"app2://%@",[tmp stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]]];
[data release];
[archiver release];
}
然后我将其解码为:
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
if (!url) {
return NO;
}
NSString *URLString = [url absoluteString];
NSString* dataString=[[URLString componentsSeparatedByString:@"app2://"] lastObject];
NSString* perString=[dataString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSKeyedUnarchiver* unArchiver=[[NSKeyedUnarchiver alloc] initForReadingWithData:[perString dataUsingEncoding:NSASCIIStringEncoding]];
TempItem* temp=[unArchiver decodeObjectForKey:@"TempData"];
[unArchiver finishDecoding];
//...//
}
我缺少的编码/解码自定义类还有更多吗?我确实在我的课堂上实现了NSCoding,我认为这是我的问题所在
[perstring dataUsingEncoding:NSASCIIStringEncoding]
因为它看起来总是空的
谢谢
我检查了编码后的输出,结果是这样的
bplist00Ô,-T$topX$objectsX$versionY$archiverÑXTempData©
'U$nullÖ
XitemsizeXquantityUpriceV$classYconvertedTunitQ1#?ð
加上百分之十的逃逸率
bplist00%C3%94%01%02%03%04%05%08,-T$topX$objectsX$versionY$archiver%C3%91%06%07XTempData%C2%80%01%C2%A9%09%0A%17%18%19%1A%1B%1F'U$null%C3%96%0B%0C%0D%0E%0F%10%11%12%13%14%15%16XitemsizeXquantityUpriceV$classYconvertedTunit%C2%80%03%C2%80%05%C2%80%04%C2%80%08%C2%80%06%C2%80%02Q1%23?%C3%B0%00%00%00%00%00%00%23?%C3%B0%00%00%00%00%00%00%10%01%C3%92%1C%0E%1D%1EZNS.objects%C2%A0%C2%80%07%C3%92%20!%22&X$classesZ$classname%C2%A3%23$%25%5ENSMutableArrayWNSArrayXNSObject%5ENSMutableArray%C3%92%20!(+%C2%A2)*XTempItemXNSObjectXTempItem%12%00%01%C2%86%C2%A0_%10%0FNSKeyedArchiver%00%08%00%11%00%16%00%1F%00(%002%005%00%3E%00@%00J%00P%00%5D%00f%00o%00u%00%7C%00%C2%86%00%C2%8B%00%C2%8D%00%C2%8F%00%C2%91%00%C2%93%00%C2%95%00%C2%97%00%C2%99%00%C2%A2%00%C2%AB%00%C2%AD%00%C2%B2%00%C2%BD%00%C2%BE%00%C3%80%00%C3%85%00%C3%8E%00%C3%99%00%C3%9D%00%C3%AC%00%C3%B4%00%C3%BD%01%0C%01%11%01%14%01%1D%01&%01/%014%00%00%00%00%00%00%02%01%00%00%00%00%00%00%00.%00%00%00%00%00%00%00%00%00%00%00%00%00%00%01F
我在解码部分添加了nslog,结果是一样的。我很困惑。。。
修复[unArchiver finishdecoding]的错误位置后;我现在得到了错误
*** -[NSKeyedUnarchiver initForReadingWithData:]: data is NULL
do
NSLog(@“%@”,tmp)代码>在代码中设置后,您将对数据进行编码,并验证得到的结果。我问这个问题是因为我在那里得到了nil
。因此,整个前提可能不正确。您需要在解码数据之后而不是之前调用finishDecoding
。尝试使用nsisolatin1stringecoding
。它在这里点击了一下,但我不知道它为什么起作用。@Deepak,这就成功了!如果你把它作为一个答案,我会接受。非常感谢你的帮助!!!