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: 25

392
votes
answers
28 views
+10

Duplicate and rename Xcode project & associated folders

I would like to be able to duplicate an entire Xcode project, rename the project and the associated files without Xcode going mental, and without having to manually re-import all files to the project.

up vote 360 down vote accepted favorite
沙发
+3600
+50

這個答案是各種其他StackOverflow帖子和互聯網上的教程的高潮,這些帖子和教程被帶到一個地方供我將來參考,並幫助其他可能面臨同樣問題的人。最後給出了其他答案的所有功勞。

複製Xcode項目
  • 在Finder中,將項目文件夾複製到新的所需位置項目。在此階段不要重命名.xcodeproj文件名或任何關聯的文件夾。

  • 在Xcode中,重命名項目。從導航器窗格(左窗格)中選擇項目。在“工具”窗格(右窗格)中重命名項目,接受Xcode建議的更改。

  • 在Xcode中,重命名“管理方案”中的方案,還要重命名您可能擁有的任何目標。

  • 如果您沒有使用默認的捆綁包標識符,該捆綁標識符包含最後的當前PRODUCT_NAME(因此會自動更新),然後更改您的將標識符捆綁到您將用於復制項目的新標識符。

    重命名源文件夾

    因此,按照上述步驟操作後,您應該具有應該成功構建和編譯的重複和重命名的Xcode項目,但是您的源代碼文件夾仍將按原始項目中的名稱命名。這不會導致任何編譯器問題,但它不是人們在SCM等中導航的最清晰的文件結構。要重命名此文件夾而不破壞所有文件鏈接,請按照下列步驟操作:

      < li>

      在Finder中,重命名源文件夾。這將破壞您的項目,因為Xcode不會自動檢測更改。您的所有xcode文件列表都將丟失與實際文件的鏈接,因此全部將變為紅色。

    • 在Xcode中,單擊您重命名的虛擬文件夾(這很可能在你的實際.xcodeproject下面的頂部,重命名這個以匹配Finder中的名稱,這不會修復任何東西,嚴格來說不是必需的步驟,但是文件名匹配很好。

    • 在Xcode中,選擇剛剛在導航窗格中重命名的文件夾。然後在“工具”窗格(最右側)中,單擊“位置”下拉菜單下方的深灰色文件夾圖標。從這裡,導航到查找器中的重命名文件夾,然後單擊“選擇”。這將自動重新關聯所有文件,並且它們不應再在Xcode導航窗格中顯示為紅色。

      • 在項目/目標構建設置中,搜索舊文件夾名稱並手動重命名您發生的任何事件找。通常有一個用於prefix.pch,一個用於info.plist,但可能還有更多。

      • 如果您使用的是任何第三方庫(Testflight / Hockeyapp /等)你還需要搜索“圖書館搜索路徑”並在此重命名舊文件名的任何出現。

      • 對項目可能包含的任何單元測試源代碼文件夾重複此過程,過程是相同的。

        這應該允許您複製&amp; 重命名一個xcode項目和所有相關文件,而無需手動編輯任何xcode文件,並且有可能搞亂。

        Credits

        非常感謝尼克洛克伍德 Pauly Glott 為此問題提供單獨的答案。

按照上面的說法我剛搜索了一個洞項目的“舊名稱”,發現需要更改的內容(前綴標題),並在“新名稱”和其他地方編譯好了。偉大的教程 - 正是我需要的。(經過Xcode 5.0.1 / iOS 7.0測試) - Mac於2013年10月22日15:23發布

作為一個好奇心,這裡有一種老式的方式來做這件事... stackoverflow.com/questions/10006482/(丹尼爾的回答) - Fattie 12年6月6日在9:34

這個答案來自天堂 - natecraft1 2015年9月23日19:39

Xcode 7.1.1在第一個障礙時為我崩潰 - 重命名項目。會調查,但還有其他人發現了嗎? - HughHughTeotl 2015年12月21日16:32

當您在項目中集成Cocoapods時,它缺少如何處理。我找到了一個有用的鏈接來處理它:h4ckish.com/2015/01/22/renaming-your-cocoapods-ios-project - KK Nov 11 '16 at 12:01

+250

我發布這個是因為我在 XCode 中重命名項目時一直很努力。

重命名項目很簡單但是這並沒有重命名源代碼夾。以下是我在Xcode 4和5中所做的工作的一步一步,感謝下面的鏈接。

REF鏈接:
重命名項目。
重命名源文件夾和其他文件。

1-備份項目。

如果您正在使用git,提交任何更改,在進行任何更改之前製作整個項目文件夾的副本並在時間機器中備份(此步驟不是必需的,但我強烈建議)。

2-打開您的項目。 < / p>

3 - 在項目名稱(藍色頂部圖標)上慢速雙擊或按Enter鍵並將其重命名為您喜歡的任何內容。

注意:重命名項目並按“輸入”後,它將建議自動更改所有與項目名稱相關的條目,並允許您根據需要取消選擇其中一些條目。選擇所有這些並單擊確定。

4-重命名方案

a)單擊停止按鈕旁邊的菜單,然後選擇管理方案。

b)單擊慢速單擊或在舊名稱方案上按Enter鍵並將其重命名為你喜歡。

c)點擊確定。

5 - 構建並運行以確保它正常工作。

注意:此時,除了創建項目時創建的類中的註釋和源文件夾之外,應重命名所有重要的項目文件。接下來,我們將重命名文件系統中的文件夾。

6-關閉項目。

7-重命名主文件夾和源文件夾。 < / p>

8 - 右鍵單擊項目包 .xcodeproj 文件,然後從上下文菜單中選擇“顯示包內容”。使用任何文本編輯器打開.pbxproj文件。

9 - 使用新文件夾名稱搜索並替換任何出現的原始文件夾名稱。

< strong> 10-保存文件。

11-打開XCode項目,進行測試。

12-完成。< /強>

問題是複制並重命名複製的項目。這個答案僅用於重命名現有項目。 - martinjbaker 2014年8月31日7:07

對我來說,這是最簡單的方法。只需將原始項目文件夾(例如MyProject)遞歸複製到“MyNewProject”即可。然後打開MyNewProject並繼續執行fs_tigre的說明。我很驚訝Android Studio和Xcode都沒有提供“文件 - >克隆項目”選項,這將非常方便。也許是一個很好的插件項目(nshipster.com/xcode-plugins)? - Blisterpeanuts 2016年2月17日20:21

只有對我有用的方法 - XCode 8.2 - GreenAsJade 2017年1月3日3:59

步驟10.1 - 如果您有橋接標題和/或權利文件,請重命名這些文件以反映您的新名稱。如果使用Cocoapods,請編輯pod文件中的名稱。 - David Lari 18年4月24日12:40

+40

這僅用於重命名應用程序的內部,但外部應用程序的文件夾保持不變 - smac89 2016年2月16日在1:37

+20

我在重命名我的iOS項目後使用此腳本。它有助於更改目錄名稱並使名稱同步。

http:/ /github.com/ytbryan/rename

注意:您需要手動更改方案的名稱。

+10

在本書的示例代碼中“Instant OpenCV for iOS”我找到了一個bash腳本,可以將項目從一個文件夾複製到另一個文件夾。
做一些研究我發現了一個博客文章,似乎是該腳本的原作者: http://mohrt.blogspot.it/2009/01/renaming-xcode-project- from-command.html ,您可以在其中下載腳本
我試了一下,然後從終端這樣運行它 < pre> sh renameXcodeProject.sh&lt; name-of-existing-folder&gt; &LT;名稱的文件夾到創建&GT;

工作正常。
可以使用文本編輯器打開文件找到其他信息。
希望有所幫助

0

我正在使用Xcode 6+而我只是這樣做:

  • 將項目文件夾中的所有文件複製到新文件夾(使用新名稱)。
  • 打開 * .xcodeproj或* .xcworkspace
  • 更改項目名稱。
  • 單擊架構並刪除當前的chema並添加新的chema。 < p>已完成,但窗口Xcode和 * .xcodeproj或* .xcworkspace 的名稱仍為&lt; old-name&gt; 然後我這樣做:
    • pop install
    • 打開&lt; new name&gt; .xcworkspace < / UL>
0

還有一件事需要嘗試!

當我複制所有文件,打開項目並重命名時,所有內容都更改為我的新項目名稱,除了以進行測試目標!我收到一個鏈接器錯誤,說我丟失了一個名為“myOldProjectname.app”的文件。以下是修復它的原因:

  1. 單擊您的項目設置並選擇您的測試目標

  2. 點擊構建設置並蒐索“測試主機”

  3. 檢查這兩個文件路徑。有可能這兩條路徑仍然指向您的舊項目名稱。

    希望有所幫助!< / p>

0

對於在復制項目後遇到故事板崩潰問題的其他人,請轉到Identity Inspector下的Main.storyboard。

接下來,檢查您當前的模塊是否是正確的重命名模塊而不是舊模塊

您是否檢查過libpods.a是否位於目標的“鏈接框架和庫”中?在你的構建階段呢? - BoilingLime 2015年4月25日17:04

你有設法解決這個問題嗎?我有同樣的錯誤 - 克里斯托弗·弗朗西斯科2015年7月1日15:06

@ChristopherFrancisco我解決了它,檢查我的答案。 - Arbitur 2015年7月24日10:20

@Arbitur感謝man - Christopher Francisco 2015年7月24日17:10

這個如何回答[1]解決了我的問題!希望它有所幫助[1]:stackoverflow.com/a/31161871/1557663 - MárioCarvalho2015年9月29日17:06

0

我正在使用簡單的BASH腳本進行重命名。

用法: ./ rename.sh oldName newName

 #!/ bin / sh OLDNAME = $ 1 NEWNAME = $ 2 export LC_CTYPE = C export LANG = C find。-type f!-path“。* /。*” -  exec sed -i'' -  e“s / $ {OLDNAME} / $ {NEWNAME} / g”{} + mv“$ {OLDNAME} .xcodeproj”“$ {NEWNAME} .xcodeproj“mv”$ {OLDNAME}“”$ {NEWNAME}“  

注意:

  1. 此腳本將忽略所有文件,如。 git .DS_Store
  2. 如果舊名稱/新名稱包含空格將不起作用
  3. 如果使用pod(未測試)可能無效)

這解決了我的問題。 - 塞巴斯蒂安2016年2月1日19:09

謝謝 !這讓我第一次感到困惑--Pi Nguyen 2016年3月19日4:40

你的解釋比我在其他地方看到的要好得多。我沒有意識到發生了什麼。謝謝! - Michael Yaworski於2016年7月4日4:54

當與Arbitur的答案結合使用時,這可以解決問題。謝謝! - user1577390 2016年9月13日2:47

這是正確的答案。 - Ivan Jun 18 '18 at 8:03

0
votes
answers
12 views
+10

在迅速4

0

enter image description here在迅速4

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 


     let row=animals[indexPath.row] 
     let cellIdentifier = "memoCell" 
     var cell=tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! MemoCellTableViewCell 

     if cell == nil { 
      print("cell is nill") 
      cell = MemoCellTableViewCell(style: .default, reuseIdentifier: cellIdentifier) 
     } 

     cell.name?.text="aaa" 
     cell.address?.text="haha" 
     return cell 
    } 

添加的TableView到AlertController我具有低於錯誤。

「無法離隊與標識符memoCell細胞 - 必須註冊標識的筆尖或類或故事板連接原型細胞」

我不知道爲什麼。 我設置類的故事板沒有錯誤,也可以設置標識正確

我的代碼是在github https://github.com/kotran88/iostableviewTest

請幫我得到這個權利

+0

你嘗試'init'了'UITableViewCell'用'style'和'reuseIdentifier',有一個初始化已經存在,只是覆蓋它並且稱'超級'。 – MEnnabah

+1

這個問題的標題與你在問題中提出的問題無關。這很混亂。 – rmaddy

+1

請不要截圖你的代碼。把它作爲你問題的一部分,就像你對第二部分做的一樣。 – the4kman

沙发
0
1

你必須註冊您的廈門國際銀行/筆尖在ViewController viewDidLoad方法

let yourCustomNib = UINib(nibName: "MemoCellTableViewCell", bundle: nil) 
    self.tableView.register(yourCustomNib, forCellReuseIdentifier: "memoCell") 
67
votes
answers
16 views
+10

How to create a delay in Swift?

I want to pause my app at a certain in point. In other words, I want my app to execute the code, but then at a certain point, pause for 4 seconds, and then continue on with the rest of the code. How can I do this?

I am using Swift.

沙发
+240

您也可以使用Swift 3執行此操作。

延遲後執行此功能。

 覆蓋func viewDidLoad(){super.viewDidLoad()self。執行(#selector(ClassName.performAction),使用:nil,afterDelay:2.0)} @objc func performAction(){//此函數將在2秒後打印(“延遲”)}  
     
			
        
板凳
+180

NSTimer

@nneonneo的回答建議使用 NSTimer ,但沒有說明如何做到這一點。這是基本語法:

  let delay = 0.5 //以秒為單位的時間NSTimer.scheduledTimerWithTimeInterval(延遲,目標:self,選擇器:#selector(myFunctionName),userInfo:nil,重複:false )  

這是一個非常簡單的項目,展示如何使用它。當按下一個按鈕時,它啟動一個定時器,在延遲半秒後調用一個函數。

  import UIKit class ViewController:UIViewController {var timer = NSTimer()let delay = 0.5 //點擊按鈕時啟動計時器@IBAction func startTimerButtonTapped(sender:UIButton){//取消計時器,以防多次點擊按鈕timer.invalidate()//啟動計時器計時器= NSTimer.scheduledTimerWithTimeInterval(延遲,目標:自身,選擇器:#selector(delayedAction),userInfo:nil,重複:false)} //在延遲func後調用的函數delayedAction(){print(“action已啟動“)}}   

使用 dispatch_time (如 Palle的回答)是另一個有效的選擇。但是,它是

地板
+70

在Swift 4.2和Xcode 10.1中

您有4種方法可以延遲。總之,選項1 比一段時間後調用或執行函數更可取。在所有 sleep()中,使用情況最少。

選項1。

  DispatchQueue.main。 asyncAfter(截止日期:.now()+ 5.0){self.yourFuncHere()} //你的函數在這裡func yourFuncHere(){}   

選項2。

  perform(#selector(yourFuncHere2),with:nil,afterDelay:5.0)//你的函數@objc func yourFuncHere2(){print(“this is ...”)} < / code>  

選項3。

 <
     
			
        
4楼
+60

在Swift 3.0中嘗試以下實現

  func delayWithSeconds(_ seconds:Double,completion:@escaping() - &gt;()){DispatchQueue.main.asyncAfter(截止日期:。 now()+ seconds){completion()}}   

用法

  delayWithSeconds(1){//做某事}  
     
			
        

“使用NSFileManager,我無法進入mainBundle之外” - 你從哪裡得到這個錯誤的信息? - user529758 2013年7月26日9:10

5楼
+50
  DispatchQueue.global(qos:.background).async {sleep(4)print(“4秒後激活,並且不阻止主”)DispatchQueue.main.async {//在主線程}}  
     
			
        
6楼
+40

如果需要設置小於一秒的延遲,則無需設置.seconds參數。我希望這對某人有用。

  DispatchQueue.main.asyncAfter(截止日期:.now()+ 0.5,執行:{//你的代碼聽到}) 
     
			
        
7楼
+20

要創建簡單的時間延遲,您可以導入Darwin,然後使用sleep(秒)來執行延遲。但是,這只需要整整一秒鐘,因此對於更精確的測量,您可以導入Darwin並使用usleep(百萬分之一秒)進行非常精確的測量。為了測試這個,我寫道:

  import Darwin print(“This is one。”)sleep(1)print(“This is two。”)usleep(400000)print(“這是三。“)  

打印,然後等待1秒鐘打印,然後等待0.4秒然後打印。一切都按預期工作。

8楼
+10

您可以輕鬆創建擴展以使用延遲功能(語法:Swift 4.2 +)

 擴展名UIViewController {func delay(_ delay:Double,closure:@ escaping() - &gt;()){DispatchQueue.main.asyncAfter(deadline:DispatchTime.now()+ Double(Int64(delay * Double(NSEC_PER_SEC)))/ Double(NSEC_PER_SEC),執行:closure)}}   

如何在UIViewController中使用

  self.delay(0.1,closure:{//執行代碼}) 
     
			
        
9楼
0

如果您的代碼已在後台線程中運行,請使用暫停該線程在Foundation中使用此方法 Thread.sleep(forTimeInterval:)

例如:

  DispatchQueue.global(qos :. userInitiated).async {//代碼已在後台線程中運行,因此可以安全地休眠Thread.sleep(forTimeInterval:4.0)}   

(當您的代碼時,請參閱其他答案以獲取建議正在主線程上運行。)

10楼
-30

這是最簡單的

 延遲(0.3,閉包:{//將她想要的任何代碼放入延遲按鈕.removeFromSuperview()}) 
     
			
        
49
votes
answers
24 views
+10

Could not change executable permissions on the application

Just updated to iOS 6 sdk and latest Xcode and get this when trying to build to my 3gs. I 've added armv6 under valid architectures?

"Could not change executable permissions on the application"

沙发
+130

您可能有不同的目標名稱。您可以從頭開始啟動應用程序,但是您需要相同的目標名稱和相同的包標識符。

板凳
+130

使用相同的Bundle標識符刪除已安裝在iphone / ipad上的應用程序.iphone / ipad與具有相同捆綁標識符的應用程序混淆。所以更改會更改當前應用的Bundle標識符或刪除已安裝的應用。

地板
+70

當您從Xcode啟動應用程序並且您在手機中安裝了具有相同bundle-id但名稱不同的appstore版本時,可能會發生這種情況。在我的情況下,我在appstore中使用App_Beta是App。如果這兩個版本沒有相同的產品名稱,您將無法測試從舊版本到新版本的升級。要解決使名稱匹配。

4楼
+40

我進入了管理器並選擇了我的測試設備下面的應用程序。即使我已經刪除了設備本身的應用程序,它仍然出現在我的應用程序列表中。我在那裡刪除了它,這就解決了我的問題。

5楼
+30

您需要使用相同的捆綁包標識刪除所有應用。我做了同樣的事情,但我的iPod仍然存在相同的錯誤,我清理了( cmd + shift + k )構建並重新啟動iPod和我能夠在iPod上運行該應用程序。

6楼
+30

您只需使用相同的標識符刪除設備上已安裝的應用。

7楼
+30

我遇到了同樣的問題,但我需要將當前安裝的App保留在設備中以進行調試。我的解決方案是使用相同的:

  1. 目標名稱
  2. 捆綁標識符
  3. 產品名稱
8楼
+20

我遇到了這個錯誤,為我修復的是Build Settings下的Product Name。我已將其更改為其他內容,並開始收到此錯誤。我把它改回來修好了。

9楼
+10

只需刪除該應用程序的所有先前版本即可。由於捆綁標識符的不匹配/混淆,它發生了。我刪除了具有類似標識符的所有現有應用程序,並且能夠安裝。

10楼
0

我只需拔下USB線就可以解決此錯誤信息,並在幾秒鐘後重新插入。YMMV!

11楼
0

您需要確保您的設備未設置為具有相同Bundle ID的兩個應用程序。

12楼
-10

當我嘗試複製並粘貼一個xcode項目來構建另一個應用程序時,我遇到了這個錯誤。我必須做的是將包標識符名稱更改為與我以前的應用程序不同的名稱。

13楼
-80

無法更改應用程序的可執行權限

原因 :我在名為<的文件系統中有圖標代碼> 29x29.png 58x58.png 72x72.png 等。我有軟鏈接( ln -s )每個 iPad和iPhone上的應用程序圖標所需的名稱。例如, Icon-Small.png 是指向真實文件 29x29.png 的鏈接。

我這樣做是因為我的程序在不同的平台上運行,從手機到台式機。Android,Apple和Microsoft都有類似的要求。所以“一套圖標”和“不同操作系統的不同鏈接”對我來說最有意義。

修復 :不要使用鏈接。Apple沒有告訴你。並且他們的錯誤消息“無法更改應用程序的可執行權限”是沒用的。


查看所有不同的答案(和原因),它看起來像很多事情可能會導致它。

出於好奇,為什麼所有下來的選票?我解釋瞭如何復制問題,以及如何解決示例案例中的問題。請注意:Apple不會禁止鏈接到明確命名的文件(例如29x29.png)。查看鏈接文章的文檔。 - jww 12年12月29日4:09

我覺得你回答錯了問題? - William Denniss 2013年5月29日3:48

@William - 問題是關於錯誤“無法更改應用程序的可執行權限”。使用指向PNG的必需名稱的鏈接將導致它。修復是不使用鏈接。Apple沒有告訴你。 - 2015年5月13日21:29

103
votes
answers
41 views
+10

“Unknown class in Interface Builder file” error at runtime

Even though Interface Builder is aware of a MyClass, I get an error when starting the application.

This happens when MyClass is part of a library, and does not happen if I compile the class directly in the application target.

沙发
+130

In my case it was showing an error for a class that didn't even exist! I suspected it was something that got borked in the storyboard file. If you don't recognize the class file in the error try this:

1) open your project in sublime or another good editor. Search for the class being referred to. 2) remove the whole bit that says

customClass="UnrecognizedClassName"

3) save it. 4) return to xcode and clean the project, and try running it now.

worked for me.

enter image description here

我使用OSX TextEdit應用程序。它適用於此操作。務必先關閉項目並關閉Xcode。 - TJ 2014年1月31日21:55

這也有幫助。我有多個具有相同customClass的對象,我可能點擊了視圖而不是控制器並分配了相同的名稱。 - Mc-Apr 17年14月18日

這也是我遇到的問題的解決方案; 我之前輸入了一個部分類名,不知何故,故事板以這種方式保存(例如customClass =“MyCla”)。我沒有刪除自定義類賦值,而是謹慎地將我放在我打算首先使用的類中:) - dave 12年10月10日14:15

最後,我找到了使項目沒有錯誤的答案。謝謝。 - matiastofteby 17年8月4日在12:19

我做了@smileBot :) - matiastofteby於8月6日'17在9:02

板凳
+130

My case - Trying to use a Class from a swift framework in my objective c project, I got this error. Solution was to add Module (swift framework) of the class in Interface builder/ Storyboard as shown below. Nothing else

enter image description here

我在CocoaPods安裝的Swift項目中使用Swift框架。這種方法有效。模塊名稱是框架的名稱。 - JsW 2017年8月5日13:22

這是完美的作品。需要刪除該模塊的原因?? - iSrinivasan27 17年11月7日在6:04

地板
+90

I just want to add this answer since most if not all the answers here assume that the class actually exists.. it's just that the linker/compiler is too dumb to see it.. thus the answers revolve around either alerting the linker to the existence of the class or creating a hack to 'force' exist it..

my problem happens when this message is actually talking about a non-existent class.. so an example would be me reverting back to an old git revision that has no knowledge of a certain class.. yet the compiler complains that the said class doesn't exist..

solution?

  • Nuke the whole thing! first delete all the build files etc by deleting all the contents in this directory ~/Library/Developer/Xcode/DerivedData
  • delete the app from the phone itself (and clear the simulator contents if you are using a simulator)

you should be good to go after that

不能+1這一個,解決了我的問題。我的問題與文件已被刪除的情況完全相同,但編譯時警告仍然出現。 - Brett 2013年6月4日0:30

嘿,男人唯一比許多+ 1更好的事情就是知道你幫助了一個真實的人!很高興它對你有用:) - abbood 2013年6月4日4:45

在Storyboard中,您必須填寫標識符。有時我錯誤地將它寫在“類”字段(在Identity Inspector中)中。所以編譯器抱怨這個類不存在的原因! - 文森特於2014年6月23日8:42

4楼
+90

The best way to remove the error is: 1) Select the Class File (.m) 2) Under "Target Membership", "check" the Project name entry

這有效。我正在開發一個pod,由於某種原因,pod install命令將錯誤的目標應用於一個特定的類文件。它被應用於我擁有的資源包。正確的配置是Pods-- - 克羅薩維文2014年3月12日11:57

這對我不起作用。目標成員資格是正確的,但錯誤仍在繼續。 - Kokodoko 2014年7月25日13:10

5楼
+80

I fixed this by copying the text from my class.h and .m, deleting those class files from the project, and creating new class.h and .m files with the same name using "Add File". Then I pasted the code back into the new files, and everything worked great. Somehow the files weren't linked correctly when they were created. I didn't need to use any linker flags after that.

這對我有用 - 謝謝! - Christopher Hujanen 2011年2月14日2:21

當我第一次創建文件時,我最後沒有.m。我嘗試重命名文件並將其重新添加,但是我仍然需要在xcode開心之前刪除並重新創建文件。 - odyth'2011年5月22日凌晨1點03分

您的文件可能不屬於您的目標。重新添加它可能最終在適當的目標中使用默認複選框。 - jhoule 2011年8月25日15:01

這個解決方案也適用於我,但我100%確定在刪除第一個類(.h + .m)之前,我檢查它是我的目標的一部分。這對我來說不是問題。和Laura一樣,我剛剛刪除了這個類並再次創建它(使用不同的名稱),並且它工作正常,沒有任何其他解決方案在此頁面上。 - Nate 2011年10月19日9:14

6楼
+70

I FINALLY fixed this, I had forgotten to add the following code to my .m file:

@implementation MyTableViewCell

@end

So it was being caused because I had made a placeholder @interface for my table cell, that had a connection to an element in the .xib file, but there is a bug in Interface Builder where if no @implementation is specified for a class, it can't find it.

I had gone through all of the steps from other forums of viewing the .xib as source and seeing MyTableViewCell even though I had commented it out of my code. I had tried resetting the simulator. I even tried breaking all of my classes up into separate files named the same as the interfaces, but nothing worked until this.

P.S. in my experience, it doesn't matter if the names of the .h/.m files are different from the names of the @interface. I have several files containing more than one @interface and they work fine.

P.P.S. I have a more detailed explanation of why UITableViewCell and UICollectionViewCell cause this error at https://stackoverflow.com/a/22797318/539149 along with how to reveal it at compile-time using registerClass: forCellWithReuseIdentifier:.

我希望我可以兩次投票。 - theDuncs 2014年7月30日8:33

7楼
+60

This happens because the .xib has got a stale link to the old App Delegate which does not exist anymore. I fixed it like thus:

  • Right click on the .xib and select Open as > Source code
  • In this file, search the old App delegate and replace it with the new one

打開源代碼不再存在,但您可以輕鬆右鍵單擊,在Finder中顯示,然後右鍵單擊該文件,並在TextEdit中打開。當然,在進行任何更改之前備份文件;) - Scott Allen 2013年12月28日4:08

8楼
+60

just add below code at the starting of appdelegate applicatoindidfinishlanching method,then it will works fine

[myclass class];

是的,這已在公認的答案中提到過。 - jhoule 2012年8月16日14:58

9楼
+50

I tried this, and other, answers listed on this site, none of which sorted it for me. This comments (from http://www.iphonedevsdk.com/forum/iphone-sdk-development/43330-unknown-class-interface-builder-file.html) helped:

After searching and searching and searching, I finally discovered the name of this deleted class hidden in a file. I had to open the interface builder files in X-code, by right clicking on them and choosing 'view as source code'. Then searching for it came up with

<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>com.apple.InterfaceBuilder.IBCocoaTouchP lu gin</string>
<string>*this was the class name*</string>

Simply removing that last line doesn't fix it unfortunately, complaining that there are the wrong number of items in the file. You need to remove the corresponding line in the section of lines above it, which refers to CustomClass.

10楼
+50

In my case, I have XCode6, the specified class .m file end up in the wrong place in build phase - It should have been under Compile Sources, but end up in the Copy Bundle Resources

謝謝你,我開始查看列表,發現我的文件剛剛丟失,可能是在我創建它時我沒有設置目標正確 - schmru 8月25日'17在9:01

11楼
+40

This problem does not seem to get outdated.

I had the same issue with Xcode 8 and solved it similiar like smilebot:

  1. Open your storyboard file as "Source code" within Xcode:

  2. Search for the class being referred to & remove the whole bit that says

customClass="UnrecognizedClassName"

  1. Open your storyboard file as "interfacebuilder - storyboard" again and rebuild your app.
12楼
+30

Not only in project settings, but in Target setting also u have to add -all_load -ObjC flags..

Core-Plot: Unknown class CPLayerHostingView in Interface Builder file

13楼
+30

Just remove the MyClass.m and .h and add them to project again is work for me.

14楼
+30

I had 'Unknown class favouritesButton in Interface Builder file' and tracked it down to a storybook scene where the button in question had a bogus custom class of "favouritesButton" in the Class field at the top of the Identity Inspector. I meant to put that value in the next field: Identity Label.

Changing this to "UIButton" solved the problem.

15楼
+20

I ran into this in Swift.

Moving the .xib file into the project's Base.lproj folder got rid of this error.

感謝分享這個,但它沒有解決我的問題。這是我終於找到的解決方案:stackoverflow.com/a/28760089/456434 - Mazyod 2015年2月27日在7:58

我也碰到了這個問題。但在我的情況下,缺少的模塊名稱是問題:請參閱 - 貝西於2015年3月12日14:55

16楼
+10

I had this error crop up today when converting my aaLuminate app to Universal under Xcode 4. This app is based on the utility template and was originally built under Xcode 3.

To save time I copied the iPhone Main and Flipside Views across to appropriate names on the Universal app. I experienced the "Unknown class x in Interface Builder file" error. In my case it was nothing in the XIB files or targets.

I had also copied the aaLuminate-Info.plist file across for other reasons - this had an old key "Main nib file base name" set to MainWindow.

As soon as I deleted this key it fixed the problem!

17楼
+10

In my case I got this error because I'd tried to save some work by creating a new project and then deleting several of the source files and copying over the source files of the same name from the working project. I also copied my MainStoryBoard file which was looking for my RootViewController. However, when I had deleted the original RootViewController and then added in the RootViewController from the previous product, evidently the Add Files operation failed to "check" the target box as suggested above. By merely visting all of the newley imported ".m" files and making sure that the target membership box was checked, all was well. I think what was happening was that the storyboard file was looking for a class that had been "excluded" from the link because the target membership was unchecked. Making sure the required files for the target are so designated in the target membership in the file inspector did the trick. Thanks Pat! (see above)

18楼
+10

In my case it was because I declared a subclass of a subclass of a UITableView cell in the .h file (the declaration of both subclasses were in the same .h file), but forgot to make an empty implementation of that second subclass in the .m file.

don't forget to implement any subclass of a subclass you declare in the .h file! sounds simple, but easy to forget because Xcode will do this for you if you are working with one class per .h/.m file.

19楼
+10

I had "Unknown class RateView in Interface Builder" where RateView was a subclass of UIView. I had dropped a UIView onto my Storyboard scene and changed the Custom class field to RateView. Still, this error appeared.

To debug, I changed the name of my class to RateView2 and changed all references to match except the Custom class field of the UIView. The error message still appeared as before with RateView as the missing class. This confirmed that the error message was related to the value of the Custom class field. I changed this value to RateView2 and the error message changed to "Unknown class RateView2 in Interface Builder". Progress of sorts.

Finally, I inspected the source code files themselves in the File Inspector. There I discovered that the source code file (which I had copied from a tutorial) was not associated with my Target. In other words, it had no Target Membership. I checked the box that made the class's source code file a member of the target app and the error message went away.

20楼
+10

In my case I had deleted a class called "viewController" not realising it was selected with the storyboard's identity inspector (under 'Custom Class' up the top).

You just have to simply select the correct class for the view controller in your identity inspector's Custom Class field or add a new class to your project and select that one as your Custom Class.

Worked for me!

21楼
+10

I added the file Under Build Phase in Targets and the issue got resolved. For the steps to add the file, see my answer at:

Apple Mach-O Linker error (APActivityIcon)

22楼
+10

This drove me nuts for a bit and none of the suggestions above helped me get rid of the error. Luckily I only had one IB object using the class so I just deleted it and added it back with the same class specified. Error went away...

0
votes
answers
44 views
+10

如何在Xcode中啓動主要iPhone應用程序更新

1

我在iPhone應用程序商店中有一個應用程序,並且已經發布了一些小的更新。我想開始一些主要功能的增加和重組,但不希望丟失我最新版本的源代碼,以防萬一出錯。如何在Xcode中啓動主要iPhone應用程序更新

我應該從頭開始一個新的Xcode項目並複製我現有的源代碼?如果我這樣做,我將能夠將這個新項目的構建作爲更新提交,或者Apple會抱怨構建來自不同的Xcode項目?

我見過(但未使用)Xcode的「快照」和「源代碼控制」功能 - 這些是我在找什麼?

任何幫助或方向極大的讚賞。

+0

我感謝大家的有益建議。 FWIW,我現在只是通過版本在本地使用SVN,並且非常享受它。 – Eric 2010-02-11 20:30:22

沙发
0
12

我會建議讓你的項目進入某種源代碼控制。目前流行的是Subversion(Xcode內置了對它的支持,但支持非常糟糕),git和Mercurial,所有這些在Mac上都運行良好。

您可以將您的項目添加到git/svn/hg/etc存儲庫,然後使用有意義的內容「標記」存儲庫(「Shipping Version 1.3」或其他)(或者您可以將項目分支到當前狀態並給出一個有意義的名字)。然後,您可以進行開發,添加並將更改提交到存儲庫。如果您需要恢復到以前的運輸版本,那很簡單,因爲您在開始工作之前對其進行了標記(將標籤想像爲快照)。

另一種選擇是啓動一個新的Xcode項目並複製它。我親自完成了這個工作,並且很好地發佈到App Store(只需確保應用的捆綁ID「com.whatever.app」與原始捆綁ID匹配,並確保您的編碼正確),而且您還是很好。儘管如此,除非你有一個非常好的理由來開始一個全新的項目,否則最好使用上述工具之一(git是我的首選)使用源代碼管理管理。

+0

每個開發者都需要使用某種源代碼管理系統來處理除了最小的項目之外的所有項目。您需要能夠跟蹤您的更改,無論大小。我真的很喜歡Xcode中對Subversion的內置支持,因爲它讓我一眼就能看到自從上次簽入以來我發生了什麼變化,它在所選版本之間提供了一個很好的圖形差異。對於任何更強大的功能,Cornerstone和Versions都是優秀的Mac Subversion客戶端。 – 2010-02-11 13:53:25

+0

相關知識!我認爲這對我真的很有用...... – Eric 2010-02-11 19:02:56

板凳
0
2

您正在使用某種形式的源代碼控制權嗎?如果沒有,請停止正在執行的操作,並確保設置svn存儲庫。 Svn與您的Mac捆綁在一起並與Xcode集成。

你也可能要開始考慮做備份...

地板
0
0

你可以做什麼的人之前說的,並使用svn git的或類似的,或者如果你不想更動任何你可以通過複製和粘貼文件夾簡單地創建自己的版本控制,並將其命名爲「項目名稱xx」並修改版本,而無需版本號

+2

雖然這樣做*工作*,我不能看到任何理由(除了懶惰)使用適當的源代碼控制,如git/svn/hg /等。 – jbrennan 2010-02-10 23:14:04

+0

這就是你爲什麼要這樣做的唯一原因。其實還有一個:你不知道如何使用git/svn/hg/etc這可以通過簡單的谷歌搜索來解決 – 2010-02-11 00:22:39

4楼
0
0

快照是第一步。當你與他們舒服,你可以連接到SVN服務器爲您的異地備份

只是做一個快照分發生成後,用版本號

5楼
0
0

最快,最簡單的,短期的解決方案是標籤選擇Xcode項目文件夾並複製它。這將創建項目中所有內容的副本。蘋果不會在意它來自重複的項目。

從長遠來看,請關注設置SVN。每當您進行更改時,這將幫助您保存以前的版本。

6楼
0
0

由於您是源控制管理的新手,因此我建議您使用Subversion

顛覆了Git比它更小的功能,但你沒有推,並承諾(在本地VS遠程)之間的混亂,你會發現有一個支持顛覆Git比它或水銀更多的軟件。

如果你需要一個快速備份,隨時可以壓縮當前工作文件夾爲您的Xcode項目,然後將其命名類似:

MyApplication-Version-1.00.zip

7楼
0
1

我強烈建議你檢查一下Git。 XCode 4內置了很好的Git支持,您也可以在XCode 3上使用Git。

Git的一個好處就是你不需要服務器來利用源代碼管理功能。一旦你將頭部纏繞在一起,對於一個獨立開發人員來說,使用SVN比SVN容易得多。

我也強烈推薦GitX - Git的免費圖形用戶界面,這絕對是驚人的。

另一個建議它GitBox - 一個簡單的工具,允許使用Dropbox作爲Git主存儲庫。這非常適合在多臺機器之間共享代碼,而無需在GitHub或其他地方支付Git託管費用。

897
votes
answers
24 views
+10

Could not insert new outlet connection: Could not find any information for the class named

I got an error on Xcode saying that there was no information about the view controller.

Could not insert new outlet connection: Could not find any information for the class named

Why is this happening?

Screenshot 1

up vote 614 down vote accepted favorite
沙发
+6140
+50

Here are some things that can fix this (in increasing order of difficulty):

  • Clean the project (Product > Clean)
  • Manually paste in

    @IBOutlet weak var viewName: UIView!
    // or
    @IBAction func viewTapped(_ sender: Any) { }
    

    and control drag to it. (Change type as needed.) Also see this.

  • Completely close Xcode and restart your project.

  • Delete the Derived Data folder (Go to Xcode > Preferences > Locations and click the gray arrow by the Derived Data folder. Then delete your project folder.)
  • Click delete on the class, remove reference (not Move to Trash), and add it back again. (see this answer)

別忘了刪除視圖控制器上的類,以便這些步驟可以正常工作 - 注意:2月13日'17,時間是14:45

在Xcode 8.3.2中,這些步驟都不適用於我。我必須“顯示身份檢查器”>清除“類”字段(突出顯示自定義類的名稱並刪除)>在“類”字段中重新輸入類名。Xcode自動完成了類名。然後我按了回車鍵。 - PeqNP於2017年5月31日21:26

將行別名purgederiveddata ='rm -rf~ / Library / Developer / Xcode / DerivedData / *'添加到〜/ .bashrc中,使用命令purgederiveddata清除一個命令 - eskimwier 18年8月15日18:14

我找到了解決此問題的另一種方法,當我更改了一些構建設置以提高構建速度時,這種情況發生在我身上。stackoverflow.com/a/50555888/2952876 - Mathias Van Houtte 18年5月28日8:30

一個簡單的“清理構建文件夾”在Xcode 10.1中為我做了。 - 奧斯卡3月17日3:52

+1330

Or if none of the above works, type out the name of the outlet into the file first @IBOutlet weak var headerHeightConstraint: NSLayoutConstraint! and then click and drag from the outlet in the nib to the variable you just programmatically created. It should work without any of the hassle of cleaning, building, and deleting anything.

通常是更快的解決方案,而不是花費年齡來清理,構建等等。謝謝。 - mohonish 2016年7月21日12:42

非常好,一旦你這樣做,自動開始出現,謝謝。 - AmJa 2016年10月4日21:21

所有的拳頭都將你的XIB對象連接到IBoutlets。然後嘗試連接它們的約束IBOutlets。沒有它,它總是會顯示錯誤。 - Chandramani 2016年12月2日6:11

在嘗試插入新插座時,它也會有所不同。因為,列表的頂部(上面有明顯的空間)工作; 列表中間沒有。 - Richard於2017年4月2日16:30

這應該被標記為最佳答案。它更容易,更快速,更可靠。它也一直有效!幹得好,謝謝@StephenPaul - denis_lor 2月11日10:58

+490

Just perform the two following steps to get rid of this error

  1. Clean project using Product > clean
  2. Run the project

Now try to add the action or outlet. That's it.

Happy Coding

奇怪......這個簡單的兩個步驟也幫助我解決了這個問題。所以我建議,首先嘗試這些簡單的步驟:-) - 交叉碼2017年1月8日6:53

我也是!這是唯一有效的方法! - Manan Mehta 17年3月25日17:39

+460

None of the tips in the best answer worked for me. Was going crazy. Then noticed that the Assistant Editor had somehow gotten set to Manual and I was on the ViewController.swift (Interface) instead of the ViewController.swift file.

Changed that and problem solved. A bit embarrassing but hey, we are all learning.

enter image description here

為我工作。謝謝 - 米蘭Jayawardane 18年3月20日在7:44

是! 這解決了! - Augusto Mar 21 '18 at 12:09

為我工作,謝謝 - Yıldırım4月11日'18在14:12

這是100%我的解決方案,謝謝! - 加文於1818年4月18日凌晨4點03分

生命保護者回答!沒有其他答案一次又一次地解決了它。太糟糕了,錯誤描述沒有給出你可能在worng文件中的最小提示。謝謝。為圖像+1,它完全清楚。 - Pauloco 18年6月14日8:34

+140

Here are the steps solved for me:

  1. Remove Class name reference from View(storyboard/xib) and save;
  2. Add Class name again and save;
  3. Clean and Build;

Done !

這是我的解決方案!謝謝!:) - GyörgyBenedek18年5月25日11:37

+80

I had the same issue. I tired below solutions but didn’t worked :

  1. Clean Project (cmd + shift + k) and even Clean Project Build (cmd + shift + alt + k)
  2. Deleted Derived data and Module Cache content

Below workaround to this issue :

  1. Move to source code file and write the IBOutlet / IBAction manually (copy paste preferred)

Screenshot 1

  1. Then move to Storyboard file and Open Utilites window
  2. Goto Connection Inspector
  3. Then Connect the IBOutlet and IBAction written in source file with Interface Builder.

Screenshot 2

拖動Outlets / Actions根本不起作用,但是在我像這樣手動完成後,一切都正常工作。 - 傑森2017年3月17日0:11

這是唯一一個適合我的人。謝謝 - binsnoel 17年5月18日14:35

這是建立連接的標準替代方法。在單選按鈕動作的情況下,唯一的方法,AFAIK。在故事板中,您還可以右鍵單擊控制器,找到該功能,然後進行連接。 - - 17年7月6日在16:10

+80

I had the same problem. I realised than in X-Code Manual item was selected when I tried to create an outlet by control-drag

enter image description here

After I set it to automatic it worked

enter image description here

我有這個確切的問題。甚至沒有註意到差異。 - 約書亞舞蹈'S 1月18日7:17

大!!!我已經為這個bug清理項目丟失了很多時間,重新啟動xCode,刪除派生數據,但這只是對我有用的解決方案!非常感謝! - Anton Eregin 18年3月7日19:23

+60

I solved this problem by programmatically creating the Labels and Textfields, and then Command-Dragged from the little empty circles on the left of the code to the components on the Storyboard. To illustrate my point: I wrote @IBOutlet weak var HelloLabel: UILabel!, and then pressed Command and dragged the code into the component on the storyboard.

這個解決方案非常適合我!除了@IBOutlet弱變量myButton:UIButton我使用相同的過程設置@IBAction func doSomething(_ sender:Any){}然後將這個func連接到我的故事板上的UIButton。感謝分享這個@KuboAndTwoStrings - Nii Mantse 2017年9月6日11:17

+60
  1. Close the project you are working on with.
  2. Delete your project's【DerivedData】folder. (This folder may inside your project's folder, or inside
    ~/Library/Developer/Xcode/DerivedData/
    (your project)/) or somewhere else that was setup by you.
  3. restart your project.
+30

I found an easier workaround as I this bug can be found on XCODE 9.

Step one go to your viewcontroller and manually write the property you want to connect as the below example, make sure you use the below format.

@IBOutlet weak var questionsStackView: UIStackView!

Step two go to your storyboard and connect your view or whatever your trying to connect to the property you created in step 1.

The above will save you time of removing and cleaning derived data.

+20

In my case this was bc I chose a new UIViewController file in IB and then tried to ctrl-drag to this new controller without first removing the previous connections in the Connections Inspector. Remove those first and try again.

+20

For me it worked when on the right tab > Localization, I checked English check box. Initially only Base was checked. After that I had no more problems. Hope this helps!

+20

I got this bug when I renamed the class. Then I solved it just by following the below steps

  • In Xcode Menu -> Product -> Clean
  • Restart the Xcode
+20

enter image description here

I selected Automatic option to select the ViewController.swift file. And then I can able to take outlets.

+20

Please perform the following two steps only to get rid of this error.

1.  Clean Project using Product -> clean.
2.  Run the Project.

Now try to add/Connect the actions or outlets.

Working Fine for me for many times.

0

Simplest solution:- I used xCode 7 and iOS 9.

in your .m

delete #import "VC.h"

save .m and link your outlet again it work fine.

0

I used xCode 7 and iOS 9.

in your .m

delete #import "VC.h"

save .m and link your outlet again it work fine.

in your .m

add #import "VC.h"

save .m

0

None of this worked for me but I did figure this out.

Inside the storyboard I copied the corresponding ViewController into the clipboard and deleted it, afterwards I pasted it again.

Suddenly everything was working like a charm again!

+1這真的是我所需要的,而不是一個巨大的“make-a-framework”腳本。 - LearnCocos2D 2013年6月5日22:44

你的SolutionURL返回“錯誤404 - 未找到” - 亞歷克斯7月14日在13:48

0

It happened when I added a Swift file into an Objective-C project .
So , in this situation what you can do is . .

  • Select MY_FILE.Swift >> Delete >> Remove Reference
  • Select MY_FOLDER >> Add MY_FILE.Swift
  • Voila ! You are good to go .

太棒了!我可以確認它適用於xcode 4.5。 - Alex1987 12年9月21日14:11

無法使用iOS 4.3目標構建它。獲取以下錯誤:-stdlib = libc ++的無效部署目標(需要iOS 5.0或更高版本) - Alex1987 12年10月20日12:40

我希望我能為這個答案提供更多的聲望點...比使用CMake創建靜態庫要容易得多。非常感謝你這樣做! - iwasrobbed於2013年1月23日20:05

它也適用於iOS 6。但也許是因為我的lib很簡單,沒有任何依賴和資源 - Paulius Vindzigelskis 2013年3月6日9:06

該解決方案存在一個大問題:其他誰想要使用此解決方案創建的框架(此解決方案建議將fremework模板安裝到xcode)必須將此模板安裝到他們的xcode! - evya 2014年9月28日12:16

0
votes
answers
32 views
+10

Explaining difference between automaticallyAdjustsScrollViewInsets, extendedLayoutIncludesOpaqueBars, edgesForExtendedLayout in iOS7

I have been reading a lot about iOS7 UI transition.

I am not able to get what these three properties automaticallyAdjustsScrollViewInsets, extendedLayoutIncludesOpaqueBars, edgesForExtendedLayout??

For example I am trying to make my view controllers start below the status bar but I am not able to achieve it.

0
votes
answers
38 views
+10

cometchat方法無響應

0

checkCometChatUrl塊不成功或失敗時執行。我的代碼是波紋管。cometchat方法無響應

#import <MessageSDKFramework/CometChat.h> 
    #import <MessageUI/MessageUI.h> 

    @interface LoginVC()<UITextFieldDelegate> 
    { 
     CometChat *cometChat; 

    } 

    @end 

    @implementation LoginVC 

    - (void)viewDidLoad{ 

     [super viewDidLoad]; 

     [cometChat checkCometChatUrl:@"https://cisner.com" success:^(NSDictionary *response) { 
      NSLog(@"%@", response); 

     //code not execute here 

     } failure:^(NSError *error) { 
      NSLog(@"%@", error.description); 
      //code not execute here 
     }]; 
     } 
+0

checkCometChatUrl已棄用。請更新cometchat版本。或聯繫cometchat客戶支持。 – Signare

+0

我已經使用另一個波紋管方法,但不執行塊。 [cometChat登錄名:@「devcisner」密碼:@「123456」成功:^(NSDictionary * response){ NSLog(@「test」); }失敗:^(NSError *錯誤)NSLog(@「test」); }]; – user3091160

+0

您收到任何錯誤? – Signare

沙发
0
0

@cometchat性反應.....

我們的團隊已經在看你的關心,我們認爲這是從網絡從iOS版SDK沒有結束。

8
votes
answers
28 views
+10

How to use pull to refresh in Swift?

I am building an RSS reader using swift and need to implement pull to reload functionality.

Here is how i am trying to do it.

class FirstViewController: UIViewController,
    UITableViewDelegate, UITableViewDataSource {

   @IBOutlet var refresh: UIScreenEdgePanGestureRecognizer
   @IBOutlet var newsCollect: UITableView

   var activityIndicator:UIActivityIndicatorView? = nil

   override func viewDidLoad() {
       super.viewDidLoad()
       self.newsCollect.scrollEnabled = true
      // Do any additional setup after loading the view, typically from a nib.

      if nCollect.news.count <= 2{
          self.collectNews()
       }
      else{
          self.removeActivityIndicator()
       }
      view.addGestureRecognizer(refresh)
   }



@IBAction func reload(sender: UIScreenEdgePanGestureRecognizer) {
    nCollect.news = News[]()
    return newsCollect.reloadData()
}

I am getting :

Property 'self.refresh' not initialized at super.init call

Please help me to understand the behaviour of Gesture recognisers. A working sample code will be a great help.

Thanks.

沙发
+20

錯誤告訴您的是, refresh 未初始化。請注意,您選擇使 refresh 不是可選的,在Swift中意味著 在調用 super.init 之前具有值(或者它隱含地被稱為,這似乎是你的情況)。要么 refresh 可選(可能是你想要的)或以某種方式初始化它。

我建議再次閱讀Swift入門文檔,其中包含了很長的內容。

最後一件事,不是答案的一部分,正如@Anil所指出的那樣,在iOS中有一個內置的拉動刷新控制,叫做 UIRefresControl ,這可能值得一看

板凳
+20

我構建了一個RSS Feed應用程序,其中我有一個 Pull To refresh 功能,該功能最初具有上面列出的一些問題。

但是為了向用戶添加上面的答案,我到處尋找我的用例並找不到它。我正在從網上下載數據(RSSFeed),我想要下載我的tableView故事刷新。

上面提到的內容涵蓋了正確的領域,但是由於人們遇到了一些問題,這就是我所做的,並且它有效:

我採取了@Blankarsch的方法並轉到我的main.storyboard並選擇表視圖以使用刷新,然後未提及的是創建IBOutlet和IBAction以有效地使用刷新

js“data-hide =”false“>
  //從main.storyboard cntrl +創建拖動刷新從左側場景到助手編輯器@IBOutlet弱var refreshButton:UIRefreshControl覆蓋func viewDidLoad(){...... ...... //包括你的代碼...... ...... //是下面調用的函數,請確保將它放在viewDidLoad //方法中,否則數據在運行應用程序時將顯示getFeedData()} //函數獲取我的數據/從Web解析我的數據(如果你havnt已經把它放在一個類似的函數中)//記住它什麼都不返回,因此返回類型是“ - &gt; Void“func getFeedData() - &gt; Void {..... .....} //來自main。storyboard cntrl +拖動到助理編輯器,這次創建一個動作而不是outlet和//確保參數設置為none並註意發送者@IBAction func refresh(){//通過調用獲取我們數據的函數獲取我們的數??據解析我們的數據getFeedData()//注意:不需要聲明refreshControl它已經被初始化。喜歡xcode refreshControl?.endRefreshing()}     

希望這能幫助任何和我一樣的人

Komodo是一個很好的Python特定替代方案,特別是如果你不想將Python與任何OSX特定的東西結合起來。 - user177800 2011年3月14日17:42

嗯。它看起來很有趣,但我不想咳嗽現金。 - Tyler Crompton 2011年3月14日17:45

Komodo Edit是他們的免費選擇。我有IDE,如果你做了認真的Python工作,那是值得的。 - user177800 2011年3月14日18:33

我推薦Wing 4只是為了它的代碼助手...非常好。但Xcode 4相當漂亮:-)。 - NickZoic 2011年3月30日10:30

我勒個去?未來的問題?日期:2011年3月11日18:40 ??? - Prajeet Shrestha 2015年6月11日14:57

地板
+20
  func pullToRefresh(){let refresh = UIRefreshControl()refresh.addTarget(self,action:#selector(handleTopRefresh(_ :)),for:。valueChanged)refresh.tintColor = UIColor.appBlack self.tblAddressBook .addSubview(refresh)} @objc func handleTopRefresh(_ sender:UIRefreshControl){self.callAddressBookListApi(isLoaderRequired:false)sender.endRefreshing()}  
     
			
        
4楼
+10

我建議在每個類中使用pull To Refresh擴展。

1)創建一個空的swift文件:File - New - File - Swift File。

2)添加以下

  // AppExtensions.swift import Foundation import UIKit var tableRefreshControl:UIRefreshControl = UIRefreshControl()// MARK: -  VIEWCONTROLLER EXTENSION METHODS public extension UIViewController {func makePullToRefreshToTableView(tableName:UITableView,triggerToMethodName:String){tableRefreshControl.attributedTitle = NSAttributedString(string:“TEST:Pull to refresh”)tableRefreshControl.backgroundColor = UIColor.whiteColor()tableRefreshControl.addTarget(self,action:Selector(triggerToMethodName) ,forControlEvents:UIControlEvents.ValueChanged)tableName.addSubview(tableRefreshControl)} func makePullToRefreshEndRefreshing(tableName:String){tableRefreshControl.endRefreshing()//其他代碼}}   

3)在View Controller中調用這些方法as:

 覆蓋func viewWillAppear(動畫:Bool){self.makePullToRefreshToTableView(bidderListTable,triggerToMethodName:“pullToRefreshBidderTable”)}   

4)在某些時候你想要結束刷新:

  func pullToRefreshBidderTable(){self.makePullToRefreshEndRefreshing(“bidderListTable”)//代碼這裡做什麼。}或者self.makePullToRefreshEndRefreshing(“bidderListTable”)
     
			
        

您的代碼是項目名稱和版權聲明,可能對您不好:)。無論你在這裡發布什麼代碼,每個人都可以免費使用--Anil Varghese於2016年2月4日17:09

謝謝Anil!我忘了刪除那些。 - AG於2016年2月10日6:32

5楼
+10

為了刷新我正在使用

DGElasticPullToRefresh

https://github.com/gontovnik/DGElasticPullToRefresh

安裝

pod'DGElasticPullToRefresh '

 導入DGElasticPullToRefresh   

並將此函數放入swift文件並從 <中調用此函數/ blockquote>

覆蓋func viewWillAppear(_ animated:Bool)

 func Refresher(){let loadingView = DGElasticPullToRefreshLoadingViewCircle()loadingView.tintColor = UIColor(紅色:255.0 / 255.0,綠色:255.0 / 255.0,藍色:255.0 / 255.0,alpha:1.0)self.table.dg_addPullToRefreshWithActionHandler({[weak self] () - &gt; Void in // Completion block你可以在這裡打印你的代碼.print(“Stack Overflow”)self?.table.dg_stopLoading()},loadingView:loadingView)self.table.dg_setPullToRefreshFillColor(UIColor(red:255.0) /255.0,綠色:57.0 / 255.0,藍色:66.0 / 255.0,alpha:1))self.table.dg_setPullToRefreshBackgroundColor(self.table.backgroundColor!)}   

並且別忘了刪除參考,而視圖將消失

刪除拉動刷新將此代碼放入您的

覆蓋func viewDidDisappear(_ animated:Bool)

 覆蓋func viewDidDisappear(_ animated:Bool){table.dg_removePullToRefresh()}   

它看起來像

< img src =“https://i.stack.imgur.com/U1IWO.gif”alt =“在此處輸入圖像說明”>

快樂編碼:)p>

快樂編碼:)p>

快樂編碼:)

感謝這麼多 - 編碼5月1日9:35

@coders你最歡迎:) - Azharhussain Shaikh 5月2日5:47

6楼
0

你可以使用tableView的這個子類:

  import UIKit protocol PullToRefreshTableViewDelegate:class {func tableViewDidStartRefreshing(tableView:PullToRefreshTableView)} class PullToRefreshTableView:UITableView {@IBOutlet weak var pullToRefreshDelegate:AnyObject?private var refreshControl:UIRefreshControl!private var isFirstLoad = true override func willMoveToSuperview(newSuperview:UIView?){super.willMoveToSuperview(newSuperview)if(isFirstLoad){addRefreshControl()isFirstLoad = false}} private func addRefreshControl(){refreshControl = UIRefreshControl()refreshControl.attributedTitle = NSAttributedString (字符串:“拉到刷新”)refreshControl.addTarget(self,action:
     
			
        
7楼
0

這就是我使用Xcode 7.2的方法,我認為這是一個主要的錯誤。我在 viewWillAppear

  refreshControl = UIRefreshControl()refreshControl裡面的 UITableViewController 中使用它!.addTarget(self,action:“ configureMessages“,forControlEvents:.ValueChanged)refreshControl!.beginRefreshing()configureMessages()func configureMessages(){//在這裡配置消息邏輯self.refreshControl!.endRefreshing()}   

當你我可以看到,在設置了我的 UIRefreshControl 後,我必須調用 configureMessage()方法,然後,後續的刷新工作正常。

8楼
-10

其他答案是正確但更多細節檢查此帖拉動刷新

在故事板中啟用刷新

當您使用UITableViewController時,解決方案非常簡單:首先,在故事板中選擇表視圖控制器,打開屬性檢查器,然後啟用刷新:

UITableViewController配備了一個開箱即用的UIRefreshControl引用。你只需要連接一些東西來啟動並在用戶下拉時完成刷新。

覆蓋viewDidLoad()

在viewDidLoad()的覆蓋中,添加一個目標來處理刷新,如下所示:

  override func viewDidLoad(){super.viewDidLoad()//加載後進行任何其他設置視圖,通常來自筆尖。self.refreshControl?.addTarget(self,action:“handleRefresh:”,forControlEvents:UIControlEvents.ValueChanged)}   
  1. 因為我已經指定了“handleRefresh:”(注意冒號) !)作為action參數,我需要在這個UITableViewController類中定義一個具有相同名稱的函數。此外,該函數應該採用一個參數
  2. 我們希望為UIControlEvent調用此操作,名為ValueChanged
  3. 不要忘記調用 refreshControl.endRefreshing() <

雖然理論上可以回答這個問題,但最好在這裡包括答案的基本部分,並提供參考鏈接。 - Tunaki 2016年2月8日8:28