Я хочу использовать расширение для совместного использования URL-адреса с хост-приложением. urlShareManager - это одноэлемент во встроенной структуре, используемой для связи между приложением и расширением. Когда я вызываю urlShareManager в Viewcontroller, я могу добавить URL-адреса. Это не работает, когда я добавляю URL-адреса с расширением. Я прошел через код по строкам и, похоже, сохранил URL-адрес при добавлении одного из расширения. Тем не менее, единственными URL-адресами, которые я могу загрузить, являются те, которые сохраняются с помощью диспетчера просмотра приложений хоста. Я не уверен, что мне здесь не хватает.Не удается сохранить 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
ViewController
- (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;
}
Я не вижу, что это касается приложения Transport Security. Передача url, фактически только nsstring, в urlShareManager не является проблемой. Разрешить произвольные нагрузки установлено значение YES в файле info.plist. Я использую общий контейнер, поэтому песочница не должна быть проблемой? Я могу передать данные, я даже могу их сохранить. Кажется, я просто не могу его получить. – Vimy
Получаете ли вы сообщения журнала на консоли? – uliwitness
Хорошо, я нашел ошибку. В моем контроллере view я вызвал [urlManager saveURLS] без добавления URL-адреса. Поскольку self.array синглтона urlShareManager всегда был пустым, когда я вызывал метод save, он перезаписывал предыдущий файл urlData.dat .. – Vimy