2014-12-08 5 views
-1

У меня возникли проблемы с помещением записей из одного атрибута в массив. Этот массив затем будет использоваться в UIPickerview. Язык Swift.Заполнение массива одним основным атрибутом данных

Есть много руководств по Pickerviews в быстрых и основных данных в swift. Но я не нашел того, что объясняет, как заполнить массив только одним из атрибутов.

Чтобы усугубить ситуацию, я все еще очень плохо отношусь к быстрому преобразованию объектива c.

Поэтому у меня есть два вопроса:

1 мое решение правильно построить массив из одного атрибута, а затем заполнить Pickerview с содержимым из этого массива?

2 как вы получаете этот массив в быстром?

objective c code on core data => array


Objective C от ссылки:

NSManagedObjectContext *managedObjectContext = [self managedObjectContext]; 
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] 
           initWithEntityName:@"WeightLog"]; 
self.contactarray = [[managedObjectContext executeFetchRequest:fetchRequest 
                 error:nil] mutableCopy]; 

titleNames = [[NSMutableArray alloc] init]; 
for (int i =0; i<=self.contactarray.count; i++) { 
    NSManagedObject *device = [self.contactarray objectAtIndex:i]; 
    [titleNames addObject:device]; 
} 

Часть я не могу писать в Swift:

NSManagedObjectContext *managedObjectContext = [self managedObjectContext]; 
     NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] 
      initWithEntityName:@"WeightLog"]; 
     self.contactarray = [[managedObjectContext executeFetchRequest:fetchRequest 
     error:nil] mutableCopy]; 

Спасибо!


Редактировать: Рабочий код!

var myTitle: String = "" 


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

     let fetchRequest = NSFetchRequest(entityName:"MyEntity") 
     var myTitles: [String] = [] 
     if let myLogs = context.executeFetchRequest(fetchRequest, error: nil) { 
      myTitles = myLogs.map { $0.myTitle } // get an array of the 'myTitle' attributes 
      println(myTitles) 

ответ

2

Я просто печатаю это здесь, так что не уверен, если он даже компилирует:

let moc = self.managedObjectContext() 
let fetchRequest = NSFetchRequest(entityName:"WeightLog") 
var titleNames: [String] = [] 
if let weightLogs = moc.executeFetchRequest(fetchRequest, error: nil) as? [WeightLog] { 
    titleNames = weightLogs.map { $0.title } // get an array of the 'title' attributes 
} 

Если вы возвращенная titleNames массив из метода, то я бы написать это , то есть не использовать var titleNames:

let moc = self.managedObjectContext() 
let fetchRequest = NSFetchRequest(entityName:"WeightLog") 
if let weightLogs = moc.executeFetchRequest(fetchRequest, error: nil) as? [WeightLog] { 
    return weightLogs.map { $0.title } // get an array of the 'title' attributes 
} else { 
    return [] 
} 
+0

Это работает после того, как одно изменение: 'а? [WeightLog] 'дал ошибки, поэтому я удалил его. 'println (titleNames)' nog дает массив только записей одного атрибута. –

1
lazy var managedObjectContext : NSManagedObjectContext? = { 
    let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate 

    if let managedObjectContext = appDelegate.managedObjectContext 
    { 
     return managedObjectContext 
    } 
    else 
    { 
     return nil 
    } 
}() 

let fetchRequest = NSFetchRequest(entityName: "Entity") 

if let fetchResults = managedObjectContext!.executeFetchRequest(fetchRequest, error: nil) as? [Entity] 
{ 

    for info in fetchResults 
    { 
     println(info.valueForKey("keyname")); 
    } 
} 
+0

Это вызывает много ошибок на строке 'if let': Переменная с геттером/сеттер не может иметь начальное значение Вычисленное свойство должно иметь явный тип ... –

Смежные вопросы