簡體   English   中英

如何在 iOS 中的擴展和主機應用程序之間共享后刪除數據

[英]How to remove data after share between extension and host app in iOS

我有一個 iOS 應用程序,需要處理來自第三個應用程序的用戶共享數據。 為了處理這個問題,我在擴展模塊中通過 UserDefaults 緩存數據:

NSUserDefaults *userDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.app.share"];

// write data
[userDefaults setValue:[((NSURL*) item) absoluteString] forKey:@"shareData"];

//open app
[self openApp];

之后,應用程序打開,然后可以讀取和處理數據:

NSUserDefaults *userDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.app.share"];
//read data
NSString *data = [userDefaults valueForKey:@"shareData"];
NSLog(@"%@", data);

到現在為止,一切正常。 應用主機可以正確地從擴展中獲取共享數據。

但是,當我需要在處理后刪除數據時:

NSUserDefaults *userDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.app.share"];
//read data
NSString *data = [userDefaults valueForKey:@"shareData"];
NSLog(@"%@", data);

...use the data and then remove it
[userDefaults removeObjectForKey: @"shareData"]

然后奇怪的事情發生如下:

  • 從第三個應用程序共享數據。
  • 如果應用程序沒有運行,則打開后,數據為零。
  • 如果應用程序正在運行,則應用程序切換以正確獲取數據。

也就是說,在應用啟動過程中數據丟失。 那是什么原因呢?

找到一種方法。 添加定時器或延時器,當時間到時,移除擴展模塊中的按鍵。 有用。

NSUserDefaults *userDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.app.share"];

//write data
[userDefaults setObject:[((NSURL*) item) absoluteString] forKey:@"shareData"];
                        
[self openApp];

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 10 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
  [userDefaults removeObjectForKey:@"shareData"];
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM