2017-02-13 10 views
5

Próbuję ustawić alternatywne ikony dla mojej aplikacji w iOS 10.3, ale za każdym razem zadzwonię powraca metoda Xcode:Konfiguracja alternatywna ikona aplikacji zwraca błąd 3072: „Operacja została anulowana” w iOS 10,3

Error Domain = NSCocoaErrorDomain Code = 3072 "Operacja została anulowana."

Używam @KlimczakM „s odpowiedź od this postu ustawić ikonę (metoda specifyIcon zwany poniżej), ale używam moje własne metody, aby załadować preferowaną ikonę z ustawieniami:

let iconSetting = userDefaults.string(forKey: "appIconSetting") 
print("The icon setting is: \(iconSetting ?? "error getting appIconSetting.")") 

switch iconSetting! { 
case "white": 
    specifyIcon(nil) 
case "dark": 
    specifyIcon("dark") 
case "text": 
    specifyIcon("text") 
case "textdark": 
    specifyIcon("textdark") 
case "rainbow": 
    specifyIcon("rainbow") 
default: 
    specifyIcon(nil) 
    print("ERROR setting icon.") 
} 

func specifyIcon(_ icon: String?) { 
    //(@KlimczakM's answer) 
} 

W mój Info.plist Mam pięć ikon; white, dark, rainbow, text i textdark:

<key>CFBundleIcons</key> 
    <dict> 
     <key>CFBundleAlternateIcons</key> 
     <dict> 
      <key>white</key> 
      <dict> 
       <key>CFBundleIconFiles</key> 
       <array> 
        <string>ic_white</string> 
       </array> 
       <key>UIPrerenderedIcon</key> 
       <false/> 
      </dict> 
      <key>dark</key> 
      <dict> 
       <key>CFBundleIconFiles</key> 
       <array> 
        <string>ic_dark</string> 
       </array> 
       <key>UIPrerenderedIcon</key> 
       <false/> 
      </dict> 
      <key>rainbow</key> 
      <dict> 
       <key>CFBundleIconFiles</key> 
       <array> 
        <string>rainbow</string> 
       </array> 
       <key>UIPrerenderedIcon</key> 
       <false/> 
      </dict> 
      <key>text</key> 
      <dict> 
       <key>CFBundleIconFiles</key> 
       <array> 
        <string>ic_text</string> 
       </array> 
       <key>UIPrerenderedIcon</key> 
       <false/> 
      </dict> 
      <key>textdark</key> 
      <dict> 
       <key>CFBundleIconFiles</key> 
       <array> 
        <string>ic_textdark</string> 
       </array> 
       <key>UIPrerenderedIcon</key> 
       <false/> 
      </dict> 
     </dict> 
     <key>CFBundlePrimaryIcon</key> 
     <dict> 
      <key>CFBundleIconFiles</key> 
      <array> 
       <string>ic_white</string> 
      </array> 
     </dict> 
    </dict> 

Wszystkie te ikony są zawarte w plikach PNG w folderze o nazwie "zasobów" w mojej aplikacji pakietu.

Jak mogę rozwiązać ten problem?

Odpowiedz

4

byłem coraz to błąd, ponieważ z dwóch powodów

  • Po pierwsze, nie zrobił "Dodaj pliki do 'ProjectNameFoo'" dodając plik PNG do projektu. W przeciwnym razie to nie zadziałało. Potem zaczęło się widzieć ikona.
  • Po drugie, otrzymywałem ten błąd, ponieważ próbowałem zmienić ikonę po viewDidLoad. Nie wiem dlaczego, ale dało mi to ten sam błąd. Kiedy próbowałem z opóźnieniem, jak poniższy kod, działało to, co dałem.

    override func viewDidLoad() { 
        super.viewDidLoad() 
    
        delay(0.01) { 
         if foo().isFoo() { 
          print("") 
    
          self.changeIcon(name: "ColdRabbit") 
         } 
         else { 
          print("") 
         } 
        } 
    } 
    
    func delay(_ delay:Double, closure:@escaping()->()) { 
        let when = DispatchTime.now() + delay 
        DispatchQueue.main.asyncAfter(deadline: when, execute: closure) 
    } 
    
+0

To działało idealnie dla mnie! Dzięki za tonę! – Wilsonator5000

+0

Nie ma problemu, dziękuję również. – flyingBear

+0

@flyingBear znalazłeś przyczynę tego problemu? Mam na myśli, dlaczego nie działa bez opóźnienia? – user3752049

Powiązane problemy