2016-03-29 34 views
0

En son Swift 2.2 güncellemesinden önce çalışan bir kod bloğum var, ancak şimdi çalışmıyor. Aşağıda kodun ilgili alıntılar bulunmaktadır. türündeki 'NSManagedObjectID' Swift 2.2: 'Element' türünün değeri (aka 'AnyObject') 'objectID' üyesi yok

  • Değer 'Unsuru bildirilmemiş Çeşidi

    • Kullanımı:

       class Event { 
           var eventObjectID:NSManagedObjectID? 
           var eventDate:NSDate? 
           var eventNotes:String? 
           var eventType:String? 
      
           init(eventObjectID: NSManagedObjectID, eventDate: NSDate, eventNotes: String, eventType: String) { 
            self.eventObjectID = eventObjectID 
            self.eventDate = eventDate 
            self.eventNotes = eventNotes 
            self.eventType = eventType 
           } 
          } 
      
      
      class EventsViewController: UIViewController { 
      
           var eventsListArray:[Event] = [Event]() 
           var selectedAquarium:Aquarium! 
           var selectedFilters = [String]?() 
      
           //Load Core Data into the noteListArray so that we can populate the table view. 
           func setEventsListArray() { 
            //Fetch all of the events from Core Data 
            var results: NSArray = fetchFromCoreData("Event") 
      
            //Sort the list so that the newest entries are on top 
            let sortDescriptor = NSSortDescriptor(key: "eventDate", ascending: false) 
            results = results.sortedArrayUsingDescriptors([sortDescriptor]) as NSArray 
      
            //Find only the event entries that are related to this aquarium and match the selected filters 
            if (results.count > 0) { 
             for fetchResult in results { 
              let currentAquarium = fetchResult.valueForKey("aquarium") as! CoreDataAquarium 
      
              for selectedFilter in selectedFilters! { 
               let currentEventType = fetchResult.valueForKey("eventType") as! String 
      
               //Find only the events related to this aquarium and scrap the rest 
               if (currentAquarium.objectID == selectedAquarium.aquariumObjectID && currentEventType == selectedFilter) { 
      
                //"This event matches the filter..." 
      
                let newEvent:Event = Event(eventObjectID: fetchResult.objectID, 
                 eventDate: fetchResult.valueForKey("eventDate") as! NSDate, 
                 eventNotes: fetchResult.valueForKey("eventNotes") as! String, 
                 eventType: fetchResult.valueForKey("eventType") as! String) 
      
                eventsListArray.append(newEvent) 
               } 
              } 
             } 
            } else { 
             print("No results returned...") 
            } 
           } 
      } 
      

      Ben (kod sonuna yakın) newEvent başlatmak satırında aşağıdaki iki hata olsun ' (aka 'AnyObject') hiçbir üyesi vardır 'objectID'

    bu hataları yeni Swift dil güncelleme ile yapmak zorunda mıyım? Yoksa gerçekten açık bir şeyi mi özlüyorum?

  • +1

    CoreData'yı içe aktarmayı mı unuttun? – matt

    +0

    Durn it .... Evet, yaptım. Haha teşekkürler! – Josh

    +0

    Bunu gerçek bir cevap olarak gireceğim. – matt

    cevap

    2

    NSManagedObject o Çekirdek Veri çerçevesi bilmediği ortaya koymaktadır terimini tanımak için derleyici yetersizlik kurtulmak için.

    (genellikle bu dosyanın en üstünde) belirtmeniz gerekir.

    1

    Mümkün olduğunca hızlı yerel koleksiyon türleri kullanın. NSArray çok belirtilmemiş. Dizilemek için diziyi NSArray'a göndermenize gerek yoktur.

    Muhtemelen tip problemlerini çözer.

    Not: Bir NSManagedObject alt sınıfı kullanmayı düşünün bütün valueForKey("...") as! ... ifadeler

    +0

    Bunun nedeni, bir şekilde CoreData hattını kazara sildiğimden kaynaklanıyor. Ama aslında gerçekten faydalı tavsiyeler veriyorsunuz ve ben buna bakacağım ve umarım kodumu geliştireceğim. Teşekkürler. – Josh

    +0

    Bu yanıt, OP'nin gerçekte sahip olduğu sorunla tamamen ilgisizdir. Ayrıca kesinlikle doğrudur! OP, kesinlikle bu tavsiyeyi almalısın. – matt

    +0

    'as!' Için (iki kez bile) reddetmek zorunda. Bir Jedi olduğun çok muhtemel değil. – nhgrif

    İlgili konular