2016-04-21 6 views
0

Ich habe einen voll funktionsfähigen Code, der perfekt funktioniert für iOS> 8.0 für iPhones> 5 und alle iPads, wo ich Informationen weitergeben und Funktion über Beobachter/Benachrichtigungen, aber auf iPhone 4S es funktioniert einfach nicht.Observer wird nach postNotification NUR auf iPhone 4S hinzugefügt

Durch das Debuggen, ich fand tatsächlich heraus, dass NUR während auf dem iPhone 4S läuft der Beobachter wird NACH hinzugefügt die Benachrichtigung geschrieben wird.

Dies geschieht auf Geräten und im Simulator, jeweils auf iOS 8 und 9.

Code:

**PostNotification** 
override func viewDidLoad() { 
    super.viewDidLoad() 

    self.registerCells() 

    UIApplication.sharedApplication().statusBarStyle = .LightContent 

    self.collectionView.delaysContentTouches = false 

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "footerUpdateContentSize:", name: "footerUpdateContentSize", object: nil) 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "seasonUpdateContentSize:", name: "seasonUpdateContentSize", object: nil) 

    self.loadDetailTVShow() 
} 

func registerCells() 
{ 
    self.collectionView.registerClass(HeaderDetailSeriesCell.self, forCellWithReuseIdentifier: "HeaderDetailSeriesCell") 
    self.collectionView.registerClass(FooterDetailSeriesCell.self, forCellWithReuseIdentifier: "FooterDetailSeriesCell") 
    self.collectionView.registerClass(SeriesSeasonContentCell.self, forCellWithReuseIdentifier: "SeriesSeasonContentCell") 
} 


func loadDetailTVShow() 
{ 
    let id: String! = (tvShow != nil) ? tvShow!.id! : episode!.seriesId! 

    ContentsClient().getContentById(id!).then { data -> Void in 
     let m: TVShow? = data as! TVShow? 
     self.tvShow = m! 
     self.collectionView.reloadData() 

     NSNotificationCenter.defaultCenter().postNotificationName("loadedTvShowlist", object: self.tvShow) 

     UIView.animateWithDuration(1.0, delay: 0, options: .TransitionNone, animations: 
      { 
       self.loadingView.alpha = 0.0 

      }, completion:nil) 
    } 
} 
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 
{ 
    cell = collectionView.dequeueReusableCellWithReuseIdentifier("SeriesSeasonContentCell", forIndexPath: indexPath) 

    let seriesContent = cell as! SeriesSeasonContentCell 

    seriesContent.seriesContentCell?.tvShow = self.tvShow 

    seriesContent.contentView.frame = CGRect(x: 0.0, y: 0.0, width: width, height: heightSeason) 
    seriesContent.seriesContentCell?.view.frame = seriesContent.contentView.frame 
} 

**Observer** 

class SeriesSeasonContent 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.registerCells() 

    seasonSelectedIndex = 0 

    collectionView.reloadData() 

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "loadedTvShowlist:", name: "loadedTvShowlist", object: nil) 
} 

func registerCells() 
{ 
    self.seasonCollection.registerClass(SeasonViewCell.self, forCellWithReuseIdentifier: "SeasonViewCell") 

    self.collectionView.registerClass(EpisodeViewCell.self, forCellWithReuseIdentifier: "EpisodeViewCell") 
} 

func loadedTvShowlist(notification : NSNotification){ 
    self.tvShow = notification.object! as? TVShow 

    if (tvShow?.seasons != nil && tvShow?.seasons?.count > 0) 
    { 
     self.currentSeason = ((tvShow?.seasons!.objectAtIndex(seasonSelectedIndex) as? Season)?.episodes)! 

     self.collectionView.reloadData() 
     self.seasonCollection.reloadData() 
    } 
} 

Obs: Im mehr collectionviews in der gleichen Ansicht verwenden, und die Feder-Dateien wird korrekt benannt

Gibt es einen Grund, warum das iPhone 4S die viewDidLoad Methode funktioniert laden nachdem die Benachrichtigung gesendet wurde?

+0

Überprüfen Sie, ob Ihre Benachrichtigung im Hauptthread auf den problematischen Plattformen gepostet wird. Dieser Block ('ContentsClient(). GetContentById (id!). Then {' scheint ein Call-Back für den Datenabruf zu sein und Sie machen auch alle Arten von UI darin. –

+0

Ja, es wird im Haupt-Thread gepostet, das ist was Das ist ein Whole-Call für den Datenabruf, aber ich verwende den PromiseKit-Pod, der diese Anfrage bearbeitet, und erst wenn die Anfrage beendet ist, wird der .then-Block ausgeführt ... –

Antwort

0

verwaltet, um mein Problem zu lösen. Die Bildschirmgröße von iphone 4s war nicht groß genug, um das Ereignis cellForIndex auszulösen, und die Klasse/Beobachter wurde erst gestartet, als der Bildschirm des Telefons nach unten scrollte.

Verwandte Themen