2014-12-08 81 views
-1

我在將條目從一個屬性放入數組中時遇到了一些問題。這個數組然後將被用在UIPickerview中。語言是Swift。使用一個核心數據屬性填充數組

在swift和Core Data中有許多關於Pickerviews的快速教程。但我還沒有找到解釋如何用一個屬性填充數組的方法。

更糟糕的是,我仍然很難將目標c轉換成swift。

所以我有兩個問題:

1我是正確的解決方案,從一個屬性建立一個數組,然後用這個數組內容填寫Pickerview?

2你如何在swift中獲得該數組?

objective c code on core data => array


從鏈接

目標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]; 
} 

我不能在斯威夫特寫的部分:

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只給出一個屬性的條目數組。 – 2014-12-08 16:43:38

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'行上引發很多錯誤: getter/setter變量不能有初始值 計算屬性必須有顯式類型 ... – 2014-12-08 16:26:10