2016-09-20 7 views
0

안녕하세요. 저는 Swift의 이전 버전을 사용하는 Swift 자습서를 따르고 있으며 Swift의 최신 버전에서 구문이 변경되었다고 생각하므로이 작업을 수행 할 수 없습니다.핵심 데이터 문제 Swift

class ViewController: UIViewController { 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

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

    var context:NSManagedObjectContext = appDel.managedObjectContext 

    var newUser = NSEntityDescription.insertNewObjectForEntityForName("users", inManagedObjectContext: context) as NSManagedObject 

    newUser.setValue("Joe", forKey: "username") 

    newUser.setValue("pass", forKey: "password") 

    do { 
    try context.save() 
    } catch let error { 
     print("Couldn't save user data") 
     print(error) 
    } 

    let request = NSFetchRequest(entityName: "Users") 
     request.returnsObjectsAsFaults = false 
     // var results = context.executeFetchRequest(request) 

    do { 
     var results = 
      try context.executeFetchRequest(request) 
     results = results as! [NSManagedObject] 
    } catch let error as NSError { 
     print(error) 
    } 

    for result: AnyObject in results { 
     print(results) 
    } 
} 

내가 수신하고이 오류는 결과에 대한 라인에 결과를하는 것입니다 : 결과에 AnyObject 에러 나에게 이것은으로 어딘가에 선언되어야한다는 인상을주고 해결되지 않은 식별자 '결과'이다 그것은 현재 해결되지 않은 변수지만,이 문제를 해결하는 방법을 알아낼 수 없다, 어떤 도움을 크게 주셔서 감사합니다, 감사합니다!

답변

1
do { 
    var results = try context.executeFetchRequest(request) 
    results = results as! [NSManagedObject] 
} catch let error as NSError { 
    print(error) 
} 

for result: AnyObject in results { 
    print(results) 
} 

results은 거기 do 블록 내부의 범위를 갖는다.

do { 
    var results = try context.executeFetchRequest(request) 
    results = results as! [NSManagedObject] 
    for result in results { 
     print(results) 
    } 
} catch let error as NSError { 
    print(error) 
} 

는 또한 AnyObject로 변환하여 정보를 잃을 필요가 없습니다 : 당신은 do 내부 배열의 처리를 이동해야합니다. CoreData에 대한 새로운 API 년대와

+0

(예 NSFetchRequest<Users>.) 아아, 이제는 내가 어디로 잘못 가고 있는지 이해하고 있지만,이 덕분에 여전히 작동하지 않을 수 있습니다. 출력은 데이터베이스에서받은 값을 보여줘야 할 때 아무것도 표시하지 않습니다. s –

+0

아, 당신의 주체 생성 및 페칭 할 때 이름이 다릅니다. '사용자'와 '사용자 '. 이상적으로는 모델 에디터와 코드에서 'User'일뿐입니다. 나는 예외를 발생시키지 않는다고 놀랍다. – jrturton

+0

나는 또한, 고마워, 많은 이상한 친구 ... 나는 적절하게 하나를 바꿨다. 여전히 값을 출력하지 않는 것 같다. ( –

0

(스위프트 3.0) 당신은 수행해야합니다

let request = NSFetchRequest<Users>(entityName: "Users") 
request.returnsObjectsAsFaults = false 

do { 
    var results = 
     try context.fetch(request) 
    // `results` will here be [Users] 
} catch let error as NSError { 
    print(error) 
} 

패치의 새로운 서명이 T<HERE>에 규정 된 동일 fetch<T : NSFetchRequestResult>(_ request: NSFetchRequest<T>) throws -> [T]입니다