2014-09-19 9 views
9

Poszukuję najlepszego sposobu na odczytanie danych z cedrów w funkcji i zapętlenie wyników po fakcie."AnyObject" nie ma członka o nazwie "contactName" Blokowanie pętli

Próbowałem go na wiele sposobów, ale wydaje się, że się odwiesił próbując dostać się do konkretnych fragmentów danych w obrębie każdego obiektu.

Oto moja konfiguracja.

func readData()->NSArray{ 
    let entityName:String = "Properties" 
    let appDel:AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate 
    let context:NSManagedObjectContext = appDel.managedObjectContext 

    // Specify what this will be working with 
    let request = NSFetchRequest(entityName: entityName) 

    // This will return instance of the object needed. Without which this would be 
    // a pain to work with. This bit saves a few steps. 
    request.returnsObjectsAsFaults = false; 

    // Get the data and put it into a variable 
    var results = context.executeFetchRequest(request, error: nil) 

    return results! 
} 

I nazywają go tutaj ..

var properties = Properties() 
    var getInfo = properties.readData() 
    println(getInfo) 

    for eachInfo:AnyObject in getInfo{ 
     println(eachInfo) 
    } 

I że zrzuca się coś takiego ...

<NSManagedObject: 0x7f87fa711d60> (entity: Properties; id: 0xd000000000040000 <x-coredata://F627AD12-3CEC-4117-8294-616ADEE068DC/Properties/p1> ; data: { 
acreage = 0; 
conditionId = 0; 
contactBusinessName = nil; 
contactEmail = nil; 
contactName = Bob; 
contactPhoneNumber = 456456456; 
isFav = nil; 
latitude = 0; 
longitude = 0; 
price = 0; 
propertyCity = nil; 
propertyId = nil; 
propertyState = nil; 
propertyStreetAddress = nil; 
propertyType = 0; 
propertyZip = nil; 
squareFeet = 0; 
year = 0; 

})

I to jest wielki. Ale kiedy idę, aby uzyskać dostęp do danych w ramach poniższego kodu ...

for eachInfo:AnyObject in getInfo{ 
     println(eachInfo.contactName) 
    } 

Otrzymuję następujący błąd.

„«AnyObject»nie ma elementu o nazwie«ContactName»”

Jestem pewien, że coś jest proste mi brakuje, ale nie mogę go znaleźć w Internecie.

Każda pomoc lub nawet lepszy sposób byłaby bardzo doceniana.


Udzielono odpowiedzi.

Po pierwsze, Dodaj przestrzeń nazw do obiektów danych podstawowych. http://i.stack.imgur.com/qNNLo.png

Po drugie, zdecydowanie wpisz dane wyjściowe funkcji, aby dane zostały wpisane do niestandardowego obiektu. W tym przypadku jest to nazywane "Właściwości".

func readData()->Array<Properties>{ 


    let appDel:AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate 
    let context:NSManagedObjectContext = appDel.managedObjectContext 

    // Specify what this will be working with 
    let request = NSFetchRequest(entityName: entityName) 

    // This will return instance of the object needed. Without which this would be 
    // a pain to work with. This bit saves a few steps. 
    request.returnsObjectsAsFaults = false; 

    // Get the data and put it into a variable 
    var results = context.executeFetchRequest(request, error: nil) 

    return results! as Array<Properties> 


} 

Na koniec wywołaj funkcję i zapętlić dane.

 var properties = Properties() 
    var getInfo = properties.readData() 

    for eachInfo in getInfo{ 

     println(eachInfo.contactName) 

    } 

Odpowiedz

1

Spróbuj

func readData()->Array<Properties>{ 
    let entityName:String = "Properties" 
    let appDel:AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate 
    let context:NSManagedObjectContext = appDel.managedObjectContext 

    // Specify what this will be working with 
    let request = NSFetchRequest(entityName: entityName) 

    // This will return instance of the object needed. Without which this would be 
    // a pain to work with. This bit saves a few steps. 
    request.returnsObjectsAsFaults = false; 

    // Get the data and put it into a variable 
    var results = context.executeFetchRequest(request, error: nil) 

    return results! as Array<Properties> 
} 

var getInfo:Array<Properties> = properties.readData() 
println(getInfo) 

for eachInfo in getInfo{ 
    println(info.contactName) 

} 

nie mam Maka tutaj, ale jestem całkiem pewny somthing jak to działa. W ten sposób mocno wpisałeś dane.

+0

Nawet gdy to robię, na odbierającym końcu wciąż chce traktować to jak "AnyObject". Powoduje to problemy z .. właściwości var = Properties() var GetInfo = properties.readData() dla eachInfo: Array w GetInfo { println (eachInfo.contactName) } i to powoduje błąd EXC_BAD_INSTRUCTION. właściwości var = Właściwości() var GetInfo = properties.readData() do eachInfo w GetInfo { println (eachInfo.contactName) } –

+0

Wybrana metoda będzie działać. Muszę tylko upewnić się, że mam dodaną przestrzeń nazw podczas konfiguracji moich obiektów Coredata. Napiszę odpowiedź. –

0

Znaleziono.

Po przekazaniu wyniku z powrotem jako NSArray, należy go w tym przypadku odrzucić do klasy NSManageObject.

Poprawne wywołanie i wyświetlenie pojedynczej informacji wewnątrz zwrotu wygląda następująco.

var properties = Properties() 
    var getInfo = properties.readData() 
    println(getInfo) 

    for eachInfo:AnyObject in getInfo{ 

     // Cast AnyObject type into the equavalent NSManagedObject. 
     let info = eachInfo as Properties 
     println(info.contactName) 

    }