Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 18

5
votes
answers
136 views
+10

ITMS-90809:不推荐使用的API使用 - Apple将停止接受使用UIWebView API的应用程序的提交

昨天,我将我的应用程序上传到TestFlight,过了一段时间Apple向我发出了这个警告:

ITMS-90809:不推荐使用的API使用 - Apple将停止接受使用UIWebView API的应用程序的提交。有关更多信息,请参见 https://developer.apple.com/documentation/uikit/uiwebview 信息。

问题是我不在我的应用程序中使用UIWebView,所以我尝试更新我的pod但仍然是同样的事情。这就是我在TestFlight上的第3次构建,这是第一次时间苹果发给我这个。有什么想法吗?

更新

这些是我的播客:

  pod'Firebase / Core'pod'
    
        
沙发
+40
+50

您可以检查已归档应用程序中的每个框架,以查看其中是否有任何框架引用 UIWebView 从命令行, cd 到存档的应用程序,例如:

  cd~ / Library / Developer / Xcode / Archives /< date> /myapp.xcarchive/产品/应用程序/ myapp.app   

在那里,使用 nm 命令转储应用程序的符号和每个应用程序的框架:

  nm myapp | 框架/ *框架中的框架grep UIWeb; do fname = $(basename $ framework .framework)echo $ fname nm $ framework / $ fname | grep UIWeb完成  

这至少会告诉你哪个框架是罪魁祸首。

谢谢你的回答它帮了很多忙。我将用更多信息更新我的问题。 - Nick Stefanidis 8月31日15:23

所以现在我唯一能做的就是等待谷歌解决问题? - Nick Stefanidis昨天

是的,您需要等待(或自行修复并提交拉取请求)。我不确定删除UIWebView的所有用途的具体截止日期是什么,但我非常怀疑它将在今年秋季发布iOS 13之前。 - Rudedog 12小时前

好的。谢谢你的帮助。 - Nick Stefanidis 8小时前

+10

检查您是否在代码中使用了UIWebView类; 如果是用WKWebView替换你的实现,否则需要检查你的Pod。

使用终端进入项目文件夹并执行命令: grep -r“UIWebView”。

必须更新所有匹配的pod。现在我被困了,因为我发现了UIWebView进入谷歌AdMob(版本7.49.0),我正在等待谷歌的新版本。

12
votes
answers
38 views
+10

iOS - watchOS App发布问题CFBundleIdentifier冲突

应用上传后,我收到以下电子邮件

我们发现了您的应用最近发送的一个或多个问题,XXX。请更正以下问题,然后重新上传。

ITMS-90806:CFBundleIdentifier冲突 - 每个捆绑包必须具有唯一的捆绑包标识符。包标识符'org.cocoapods.CocoaLumberjack'在包中使用[CocoaLumberjack.framework,CocoaLumberjack.framework]'

CocoaLumberjack是我已经用过的第三方库过去很多次没有任何问题,我很困惑。

它与框架的.plist关键字CFBundlePackageType无关,因为它在此问题/答案中指定CocoaLumberjack / Swift','?> 3.5.3'...结束

iOS应用正在使用该库,watchOS扩展使用相同的库。他们正在使用不同的库,但CocoaLumberjack是两者中唯一存在的库。

我过去已经多次发布我的应用程序而没有相同库配置的任何问题。我猜Apple在最近几天改变了对包标识符的一些限制 我过去已经多次发布我的应用程序而没有相同库配置的任何问题。我猜Apple在最近几天改变了对包标识符的一些限制 我过去已经多次发布我的应用程序而没有相同库配置的任何问题。我猜Apple在最近几天改变了对包标识符的一些限制

+60

显然Apple改变了验证过程。看起来他们不允许应用程序中的平台特定框架具有相同的标识符。

论坛上也有关于此的帖子: https://forums.developer.apple.com/thread/122048

如果你遇到这个问题因为您正在使用Cocoapods,您可以修补Podfile以将平台名称附加到包标识符,以便它们始终是唯一的( source ):

  post_install do | installer | installer.pods_project.targets。每个人都做|目标| target.build_configurations.each do | config | config.build_settings ['PRODUCT_BUNDLE_IDENTIFIER'] ='org.cocoapods。$ {PRODUCT_NAME:rfc1034identifier}  -  $(PLATFORM_NAME)'end end end   

如果您的应用中有多个目标,则可以在XCode中更改方案中的watchOS目标,并将 .watchos 附加到标识符。

我在Apple论坛上打开了这个帖子:我仍然试图了解哪个是这个问题的最佳解决方案,同时关于更改捆绑名称的解决方法看起来不错 - cristallo 8月30日13:11

请注意重命名所有pods包标识符,因为否则某些pod不正常。即:有些人一直遇到Firebase的问题,问题是该脚本已重命名其捆绑。我建议只重命名被Apple拒绝的那些。 - cristallo 18小时前

Apple刚刚批准了我的应用程序更新,该更新使用了我的答案中描述的技术。 - Tieme 18小时前

我并不是说这是错的,因为这是处理这个问题的方法:-) ...只要注意它不能适用于每个库。 - cristallo 17小时前

板凳
+60
+50

作为一种临时解决方法,我在watchOS扩展中手动重命名了bundle标识符,然后app发布工作正常,但它看起来不是一个好的解决方案,特别是如果你在CI系统上运行构建。

更好的选择是在pod文件中添加特定的安装后操作:

  post_install do | installer | installer.pods_project.targets.each do | target | if target.name =='CocoaLumberjack-watchOS'target.build_configurations.each do | config | config.build_settings ['PRODUCT_BUNDLE_IDENTIFIER'] ='org.cocoapods。$ {PRODUCT_NAME:rfc1034identifier}  -  $(PLATFORM_NAME)'end end end end   

目前有2个关于此问题的开放主题:

-20

只需从您的扩展程序中移除嵌入式框架构建阶段。

点击目标部分中的扩展程序 - > 构建阶段 - > 删除嵌入式窗格框架

参见附图:

如果我删除嵌入框架操作然后扩展应用程序不再工作,因为它不能再找到库 - cristallo 8月30日9:44

13
votes
answers
26 views
+10

Flutter:如何修复ITMS-90809:不推荐使用的API使用 - Apple将停止接受使用UIWebView API的应用程序的提交

在提交我的最新版本时,Apple突然返回一条消息,说明存在问题,具体为:

ITMS-90809:不推荐使用的API使用情况 - Apple将停止接受使用的应用提交UIWebView API。有关详细信息,请参见 https://developer.apple.com/documentation/uikit/uiwebview

由于我没有使用webview插件,我对使用 UIWebView API 的地方感到很遗憾。有关如何解决此问题的任何建议吗?

此错误出现在最新的稳定颤振版本1.7.8 + hotfix.4中,并包含以下软件包:

  http: ^ 0.12。0 [?] Android工具链 - 针对Android设备开发(Android SDK版本28.0.3)?Android SDK位于/ Users / per / Library / Android / sdk?Android NDK位置未配置(可选;对原生分析支持很有用)?平台android-28,build-tools 28.0.3?Java二进制文件:/ Applications / AndroidStudio.app/Contents/jre/jdk/Contents/Home/bin/java?JavaScriptOpenJDK Runtime Environment(build 1.8.0_152- release- 1136-b06)?接受所有Android许可。[?] Xcode  - 针对iOS和macOS开发(Xcode 10.3)?Xcode位于/Applications/Xcode.app/Contents/Developer?Xcode 10.3,Build版本10G8?CocoaPods版本1.7.4 [?] iOS工具 - 针对iOS设备开发?ios-deploy 1.9.4 [?] Android Studio(版本3.2)?Android Studio at / Applications / Android Studio.app/Contents?Flutter插件版本31。3.1?Dart插件版本181.5656?Java版OpenJDK运行时环境(版本1.8.0_152-release-1136-b06)[?] VS代码(版本1.31.1)?VS代码/ Applications / Visual Studio Code.app/Contents? Flutter扩展版本2.25.1 [?]连接设备(1个可用)?Nexus 6P?5VT7N15C31001152?android-arm64?Android 8.1.0(API 27)?未发现任何问题! 
    
        
沙发
+90
+50

我认为它是从firebase_auth插件中使用的。尝试将其更新为最新版本,然后记住运行 pod update

我倾向于同意这一点,因为搜索包含UIWebView引用的唯一数据包。我现在已经更新到firebase_auth的最新版本,并且无法再找到任何对UIWebView的引用。 - 本8月29日17:07

颤抖的团队似乎意识到了。github.com/firebase/firebase-ios-sdk/pull/3723 - 本8月29日17:14

更新到firebase_auth 0.14.0 + 5并更新pod后,对UIWebView的引用似乎消失了。希望这意味着提交不会再顺利进行。 - Paul-Erik Raue 8月30日凌晨4点28分

这是唯一对我有用的答案。 - Sheshank S. 8月30日22:13

+40

我使用我们的Cordova应用程序并通过更新依赖项修复它。

您是否有机会使用依赖项或其他依赖项使用依赖项“cordova-plugin-inappbrowser”。< / p>

如果是这样,这应该在3.1.0中修复。请参阅发布说明 https://github.com/apache/ cordova-plugin-inappbrowser / blob / master / RELEASENOTES.md 和PR修复它 https://github.com/apache/cordova-plugin-inappbrowser/pull/271

更新:它还没有修复。请参阅cordova-ios上的问题:<

嗯,即使我从Cordova应用程序中删除所有插件,我也会收到相同的电子邮件。 - Tonald Drump 8月29日10:26

是的,我可以确认我还在接受它们。所以它在科尔多瓦也必须是其他东西。Ionic webview也有这个问题:github.com/ionic-team/cordova-plugin-ionic-webview/issues/428 - Klaasvaak 8月29日12:23

另见github.com/apache/cordova-ios/issues/661 - Klaasvaak 8月29日12:26

谢谢(你的)信息。我没有使用Cordova,所以这不是原因,但firebase软件包似乎导致了这一点。 - Paul-Erik Raue 8月30日凌晨4点23分

0
votes
answers
50 views
+10

動態添加BoxViews到網格[Xamarin.Forms]

1

我想添加BoxViews在網格格式使用3列和多行。我已經使用xaml和c#文件中的行爲 定義了網格。應該發生什麼是一個BoxView應創建相同數量的圖像,每列3個圖像。動態添加BoxViews到網格[Xamarin.Forms]

感謝,

XAML

<Grid RowSpacing="0" x:Name="scrollBarGrid"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="50"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 

    <!--Where the search bar will go--> 
    <BoxView BackgroundColor="Aqua" Grid.Row="0"/> 

     <SearchBar ></SearchBar>  

     <!--Where the images will go--> 
    <BoxView BackgroundColor="Gray" Grid.Row="1"/> 
    <Grid x:Name="imageGrid" RowSpacing="0" Grid.Row="1"> 

    </Grid> 

</Grid> 

C#

public MainPage() 
    { 
     InitializeComponent(); 

     int colMaximum = 3; 
     int numberOfImages = 15; 

     //To add three columns 
     for (int i = 0; i < colMaximum; i++) 
     { 
      imageGrid.ColumnDefinitions.Add(new ColumnDefinition() 
      { 
       Width = new GridLength(120, GridUnitType.Absolute) 
      }); 
     } 

     //To add an array of rows 
     imageGrid.RowDefinitions = new RowDefinitionCollection(); 

     for (int myCount = 0; myCount <= numberOfImages/colMaximum; myCount++) 
     { 
      imageGrid.RowDefinitions.Add(new RowDefinition() 
      { 
       Height = new GridLength(120, GridUnitType.Absolute) 
      }); 

      //To add a new box view for each 
      for (int newcol = 0; newcol <= colMaximum; newcol++) 
      { 
       for (int newrow = 0; newrow <= numberOfImages/colMaximum; newrow++) 
       { 
        imageGrid.Children.Add(new BoxView() { BackgroundColor = Color.Red }); 
       } 
      } 
     } 
    } 
+0

你的代碼有什麼問題?它沒有做什麼,或者做得不正確? – Jason

+0

嗨賈森,我想要它做的是打印與變量'numberOfImages'(所以15)相同數量的框。我正在嘗試創建一個類似Instagram的UI,其中頁面將讀取要以網格格式顯示的圖像數量。無論如何,你會知道更好的方法來實現這一點,謝謝。 – Noel625

+0

你說的是你的要求,但你的代碼實際上在做什麼?你有錯誤或異常?它是否打印錯誤的項目數量?它是否做任何事情? – Jason

沙发
0
0

當您添加的孩子一個網格,你必須指定Row和Col,否則他們將在0添加,0。

imageGrid.Children.Add(new BoxView() { BackgroundColor = Color.Red }, newrow, newcol); 
0
votes
answers
59 views
+10

Ionic 2:嘗試訪問FileTransfer插件,但未安裝

0

我們正在開發使用Native File Transfer插件的應用程序。但由於一個奇怪的問題,我們無法爲iOS創建測試飛行/發佈版本。Ionic 2:嘗試訪問FileTransfer插件,但未安裝

問題: 即使我們看到下面的錯誤,而與

ionic cordova run ios -lc 

console.warn: Native: tried accessing the FileTransfer plugin but it's not installed. 

運行的應用程序在我們點擊一??個按鈕調用fileTransfer.download(..)方法的「文件傳輸」插件安裝成功後 - 應用暫停執行而不拋出任何錯誤。

我創建了一個詳細的崗位原木和代碼爲:

https://github.com/ionic-team/ionic-native/issues/2110

任何幫助?

沙发
0
2

徹底的頭腦風暴後,我找到了答案 -

我的問題是,文件傳輸對象可以從platform ready函數內部,但不是provider內訪問 - 這也對的iOS [Android版本工作正常]

這裏是我做過什麼:

因爲我需要providerFileTransfer的實例 - 我創建了一個變量 - 和更新方法 -

private fileTransfer: any; 

public setFileTransferRef(param){ 
    this.fileTransfer = param; 
} 

正如我可以訪問FileTransferplatform.ready()裏面 - 我實例化的FileTransferObject在那裏,並更新了provider如下 -

initializeApp() { 
    this.platform.ready().then(() => { 
     console.log('fileTransfer: '); 
     console.log(JSON.stringify(this.fileTransfer)); 
     // 
     let fileTransfer: FileTransferObject = this.fileTransfer.create(); 
     // 
     this.mediaIOSProv.setFileTransferRef(fileTransfer); 
     ..... 
     .... 
  • 哪裏mediaIOSProv提供負責下載郵編。

我也放在與cordova.js列入build/vendor.js後的index.html - (我碰到一些帖子,開發人員報告說,這樣做解決了他們失蹤的插件的問題) - 雖然沒有這樣的官方文檔

<body> 

    <!-- Ionic's root component and where the app will load --> 
    <ion-app></ion-app> 

    <!-- The polyfills js is generated during the build process --> 
    <script src="build/polyfills.js"></script> 

    <!-- The vendor js is generated during the build process 
     It contains all of the dependencies in node_modules --> 
    <script src="build/vendor.js"></script> 

    <!-- cordova.js required for cordova apps --> 
    <script src="cordova.js"></script> 

    <!-- The main bundle js is generated during the build process --> 
    <script src="build/main.js"></script> 

</body> 

由於應用程序成功運行iOS上 - 我不敢改變 安置cordova.js

我推測是 -

1:這將是最好的創建一個Provider來存儲在平臺內實例化的每個本機插件的引用 - 並在需要時使用引用

2:可能會丟失一些信息,尤其是關於iOS的,關於Ionic-Native Wrapper

任何建議/討論將不勝感激。

0
votes
answers
46 views
+10

加載時出錯:找不到指定主機名的服務器

1

所以我一直在爲大約最近一個月左右的時間在我的博覽會設置上發生一個奇怪的問題。我通過Expo創建了我的項目,當我在終端中使用exp start或者嘗試通過Expo XDE加載項目時,它會在依賴關係圖加載後掛起。我認爲這是一個NPM問題(並且努力修復我的編碼環境數週),但是隨後我使用create-react-native-app創建了一個新項目,並注意到似乎存在與模擬器連接的問題。當我實例與創造 - 反應 - 本機應用程序(而非世博會)的新項目中,我得到這個錯誤exp://localhost:19000 — Error while loading: a server with specified hostname could not be found. (code - 1003)這裏是什麼樣子照片:加載時出錯:找不到指定主機名的服務器

exp error while loading

然後我試圖把地址該項目從終端到模擬器:

pasting link from terminal

而且它的實際工作!該應用加載!

app loads successfully

這讓我覺得有與模擬器的連接有問題。也許它是指向錯誤的端口?使用這種方法,我可以運行由create-react-native-app生成的應用程序,但不是我通過expo創建的原始投影,因爲它仍然被掛起並且不會啓動模擬器。通過Expo創建的項目沒有iOS文件,這就是您如何啓動create-react-native-app項目(紗線運行ios)的方式。

有關如何解決此問題的任何想法?

沙发
0
1

嘗試卸載這兩個Xcode &世博會。

似乎模擬器的端口在某種不同的引用。

在重新安裝Xcode & Expo之後,確保所有x代碼,模擬器和expo本地版本都是最新的,然後再啓動模擬器。

0
votes
answers
53 views
+10

通過檢查像SKStoreProductParameterAffiliateToken這樣的常量的地址來完成什麼?

3

我從我正在使用的庫中獲取該代碼。通過檢查像SKStoreProductParameterAffiliateToken這樣的常量的地址來完成什麼?

#ifdef __IPHONE_8_0 
    if (&SKStoreProductParameterAffiliateToken) { 
     if (self.affiliateToken) { 
      [appParameters setObject:self.affiliateToken forKey:SKStoreProductParameterAffiliateToken]; 
      if (self.campaignToken) { 
       [appParameters setObject:self.campaignToken forKey:SKStoreProductParameterCampaignToken]; 
      } 
     } 
    } 
#endif 

Xcode是說第一行總是會被評估爲true,但是這條線究竟是做什麼的?我從來沒有看到一個if&,並以這種方式常數。

SKStoreProductParameterAffiliateToken被定義爲

SK_EXTERN NSString * const SKStoreProductParameterAffiliateToken NS_AVAILABLE_IOS(8_0); 

什麼是開發嘗試檢查,恆定的地址?他是否試圖檢查iOS的版本是否具有此常量定義,並且通過這樣做,他試圖檢查if中是否應該運行?但他已經有ifdef __IPHONE_8_0 ...(?? !!)

我不明白這一點。

無論如何,我正在編譯的iOS 9.3,所以我可以刪除ififdef,對不對?

+0

至少運行'SKStoreProductParameterAffiliateToken'在IOS 8.0加入。如果你不需要支持iOS 7,那麼你可以刪除'#ifdef'和'if'。 – rmaddy

沙发
0
3

這是一個檢查,看是否有弱鏈接符號是可用的。如果包含該符號的庫/框架已被弱連接並且不可用,則其地址將評估爲NULL並且if條件將是錯誤的。

請參閱使用Apple的Using SDK-Based Development中的弱連接方法,函數和符號瞭解完整詳細信息。

板凳
0
0

#ifdef __IPHONE_8_0檢查的Xcode裏面應該編譯代碼。較舊版本的Xcode將顯示有關未知變量SKStoreProductParameterAffiliateToken的錯誤。

但是,使用新版本的Xcode(與iOS SDK 8+)的時候,我們可能仍然可以爲我們的項目設置一個較低的最低目標。在這種情況下,爲了避免iOS8以下版本的設備發生崩潰,我們應該首先檢查是否存在變量,類,方法或函數。

在你的情況,我們正在檢查,如果指針SKStoreProductParameterAffiliateTokenNULL,這意味着應用程序是目前在iOS 8

0
votes
answers
62 views
+10

從iOS的發現文件生成服務類

0

我有一個rpc格式的發現文件,但使用了新的生成器,我無法生成它。從iOS的發現文件生成服務類

如何使用新的服務生成器爲iOS生成文件?

沙发
0
0

您需要獲取REST格式發現文件。

0
votes
answers
73 views
+10

在Alamofire請求參數中傳遞CSRF令牌

0

我想在我的網站上登錄一個用戶,該用戶的登錄表單中有一個CSRF令牌。我在iOS上使用Alamofire和Swift。在Alamofire請求參數中傳遞CSRF令牌

這裏是形式的代碼:

    <form id="login-form" class="body" action="login" method="post"> 

           <div class="form-group label-floating"> 
            <label class="control-label" for="username">Identifiant</label> 
            <input id="username" type="text" name="username" class="form-control" required/> 
           </div> 

           <div class="form-group label-floating"> 
            <label class="control-label" for="password">Mot de passe</label> 
            <input id="password" type="password" name="password" class="form-control" 
              required/> 
           </div> 

           <div class="footer"> 
                     <div class="col-md-offset-3 col-md-6"> 
             <input type="hidden" id="csrf_token" name="_csrf" 
               value="7cf3b95d-1310-4d00-b1b2-7040340b12e6"/> 
             <button type="submit" class="btn btn-lg btn-primary btn-block"> 
              Connexion 
             </button> 
            </div> 
           </div> 
          </form> 

我創建它返回CSRF令牌的功能。然後我調用另一個函數來記錄用戶憑證和CSRF令牌。

下面是這個函數:

func login(token: String, completion: @escaping (_ success: Bool) -> Void) { 

     let customerURL = "https://mywebsite.com/uaa/login" 
     let user = "username" 
     let password = "password" 
     let parameters = [ "username" : user, "password" : password, "Authorization" : token] 

     Alamofire.request(customerURL, method: .post, parameters: parameters, encoding: JSONEncoding.default) 

      .responseString { response in 

       switch response.result { 
       case .success: 
        print("Validation Successful") 
        if let JSON = response.result.value { 
         print(JSON) 
        } 
       case .failure(let error): 
        print(error) 

       } 
     } 
    } 

但是當我運行我的應用程序,這裏是我得到:

{"timestamp":1510425797543,"status":403,"error":"Forbidden","message":"Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-XSRF-TOKEN'.","path":"/uaa/login"} 

任何想法?在此先感謝您的幫助!

沙发
0
0
'null' was found on the request parameter '_csrf' 

我看你使用的是「授權」名參數,而從讀它「_csrf」的API compline參數從「授權」到「_csrf」

的名字從

改變
let parameters = [ "username" : user, "password" : password, "Authorization" : token] 

let parameters = [ "username" : user, "password" : password, "_csrf" : token] 
0
votes
answers
39 views
+10

斯威夫特:地圖返回4個值作爲2點之間的距離,爲什麼?

0

我計算2點之間的距離。對於第一點,我分配了緯度和經度。第二個座標點在用戶點擊地圖的任何位置進行協調。每件事情都很完美,除了四次打印的答案。斯威夫特:地圖返回4個值作爲2點之間的距離,爲什麼?

  • 我試着返回第一個索引(原來第一個索引是4 的值)。
  • 我試圖將這些值添加到一個集以刪除重複的(它沒有工作)。
  • 我試圖做一個循環,並在第一次後中斷(仍然返回4個值)。 這裏我在哪裏創建用戶點擊(內viewdidAppear)註釋:

let uilpgr = UILongPressGestureRecognizer(target: self, action: #selector(MapViewController.longpress(gestureRecognizer:))) 
     uilpgr.minimumPressDuration = 2 
     map.addGestureRecognizer(uilpgr) 

這是計算的距離(功能viewdidAppear後)功能:

@objc func longpress(gestureRecognizer: UIGestureRecognizer){ 
    let touchPoint = gestureRecognizer.location(in: self.map) 
    let coordinates = map.convert(touchPoint, toCoordinateFrom: self.map) 
    let annotation = MKPointAnnotation() 
    annotation.coordinate = coordinates 
    annotation.title = "Destination" 
    map.addAnnotation(annotation) 

    let source = CLLocation(latitude: 5, longitude: 5) 

    let distination = CLLocation(latitude: coordinates.latitude, longitude: coordinates.longitude) 

    let distanceInMeters = source.distance(from: distination) 
    let distanceInMiles = String(Int(distanceInMeters/1.6)) 

    myArrayDataStructure.myArray.append(distanceInMiles) 
    UserDefaults.standard.set(myArrayDataStructure.myArray, forKey: "items") 
} 
沙发
0
1

你的問題是你如何處理手勢。 「長按」手勢(與其他人一樣)有幾種狀態。當手勢開始時,手勢結束時,手勢被取消時以及在「長按」情況下手勢被更新時,會調用手勢動作。

只有當手勢狀態爲「結束」時,纔想執行距離計算。

@objc func longpress(gestureRecognizer: UIGestureRecognizer){ 
    if gestureRecognizer.state = .ended { 
     // your code here 
    } 
}