2
我想使用擴展程序與主機應用程序共享網址。 urlShareManager是我用於在應用程序和擴展之間進行通信的嵌入式框架中的單例。當我在Viewcontroller中調用urlShareManager時,我可以添加url。當我使用擴展名添加網址時,它不起作用。我逐行瀏覽代碼,似乎在從擴展中添加一個代碼時保存了網址。然而,唯一可以加載的網址是與主機應用程序視圖控制器一起保存的網址。我不確定我在這裏錯過了什麼。無法保存與擴展程序共享的網址
urlShareManager
+ (id)UrlShareManager
{
static UrlShare *urlShareManager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
urlShareManager = [[self alloc] init];
// urlShareManager.urlArray = [[NSMutableArray alloc]init];
});
return urlShareManager;
}
- (id)init
{
if (self = [super init])
{
self.urlArray = [[NSMutableArray alloc]init];
self.urlArray = [self loadURLS];
}
return self;
}
- (NSString *)getFileURL
{
NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.net.noizystudios.urlGroup"];
NSURL *jsonURL = [NSURL URLWithString:[containerURL.path stringByAppendingString:@"/urlData.dat"]];
NSString *filePath = [jsonURL absoluteString];
NSLog(@"Filepath: %@", filePath);
return filePath;
}
- (void)addURL:(NSString *)url
{
self.urlArray = [NSMutableArray new];
NSLog(@"URL STRING: %@", url);
Bookmark *urlBookmark = [[Bookmark alloc]init];
urlBookmark.urlString = url;
[self.urlArray addObject:urlBookmark];
[self saveURLS];
}
- (NSMutableArray *)loadURLS
{
NSString *path = [self getFileURL];
NSMutableArray *url = [[NSMutableArray alloc]init];
url = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
NSLog(@"URL array inhoud: %@", url);
return url;
}
- (void)saveURLS
{
NSString *path = [self getFileURL];
BOOL isSaved = [NSKeyedArchiver archiveRootObject:self.urlArray toFile:path];
NSLog (isSaved ? @"saved" : @"not saved");
}
@end
視圖控制器
- (void)viewDidLoad
{
[super viewDidLoad];
UrlShare *urlManager = [UrlShare UrlShareManager];
[urlManager addURL:@"http://www.reddit.com"];
articleListArray = [urlManager loadURLS];
[self.tableView reloadData];
}
ActionRequestHandler
- (void)doneWithResults:(NSDictionary *)resultsForJavaScriptFinalize
{
...
NSString *url = resultsForJavaScriptFinalize[@"URL"];
UrlShare *urlManager = [UrlShare UrlShareManager];
[urlManager addURL:url];
...
// Don't hold on to this after we finished with it.
self.extensionContext = nil;
}
我沒有看到App Transport Security與此有關。將url,實際上只是一個nsstring傳遞給urlShareManager不是問題。允許任意負載在info.plist中設置爲YES。 我正在使用共享容器,所以沙盒不應該是一個問題?我可以傳遞數據,我甚至可以保存它。我似乎無法檢索它。 – Vimy
你在控制檯上得到任何日誌消息嗎? – uliwitness
好的,我發現了這個錯誤。在我的視圖控制器中,我調用了[urlManager saveURLS],但沒有添加url。因爲當我調用save方法時,urlShareManager單例的self.array總是空的,它覆蓋了之前的urlData.dat文件。 – Vimy