확장 프로그램을 사용하여 URL을 호스트 앱과 공유하고 싶습니다. urlShareManager는 앱과 확장 프로그램간에 통신하는 데 사용하는 임베디드 프레임 워크의 싱글 톤입니다. ViewController에서 urlShareManager를 호출하면 url을 추가 할 수 있습니다. 확장 프로그램과 함께 URL을 추가하면 작동하지 않습니다. 나는 줄 단위로 코드를 밟았으며 확장에서 하나를 추가 할 때 url을 저장하는 것으로 보인다. 그러나 내가로드 할 수있는 유일한 URL은 호스트 app viewcontroller로 저장된 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;
}
App Transport Security와 관련이 없습니다. urlShareManager에 url, 실제로는 nsstring을 전달하는 것은 문제가 아닙니다. info.plist에서 임의로드 허용은 YES로 설정됩니다. 샌드 박스가 문제가되지 않도록 공유 컨테이너를 사용하고 있습니까? 나는 데이터를 전달할 수 있으며 저장할 수도있다. 나는 그것을 찾을 수없는 것 같습니다. – Vimy
콘솔에 로그 메시지가 있습니까? – uliwitness
알았어, 그 버그를 발견했다. 내 viewcontroller에서 url을 추가하지 않고 [urlManager saveURLS]를 호출했습니다. save 메소드를 호출했을 때 urlShareManager 싱글 톤의 self.array가 항상 비어 있었기 때문에 이전 urlData.dat 파일을 덮어 썼습니다. – Vimy