2016-12-20 9 views
0

Objective CアプリケーションをSwift 3にアップデートしています。前のテーブルから渡されたオブジェクトに関連付けられた入力データを保存するにはどうすればよいですか? Objective Cのアプリが正常に動作が、私は同等の構文はスウィフト3.Swiftのコアデータにデータを保存

のObjective Cのコードのためになるものをうまくすることはできませんされていますスウィフト3コードがある

- (void)insertNewObject:(NSString*) strRain; 
{ 
NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext]; 
NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity]; 
Rainfall *altRainfall = (Rainfall*)[NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context]; 

altRainfall.gauge = strRain; 
altRainfall.primaryGauge = self.detailItem; 
altRainfall.dateRecorded = todaysDate; 
altRainfall.sortDate = [NSDate date]; 

NSError *error = nil; 
if (![context save:&error]) 
{ 
    NSDictionary *dict = [error userInfo]; 
    NSString *errMsg = [dict valueForKey:@"errMessage"]; 

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Note" message:errMsg delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil]; 

    [alert show]; 

    [self.managedObjectContext deleteObject:altRainfall]; 
}} 

func save(strRain: String) { 

    let entity = NSEntityDescription.entity(forEntityName: "Rainfall", in: coreDataStack.context)! 
    let newRainfall = NSManagedObject(entity: entity, insertInto: coreDataStack.context) 
    newRainfall.setValue(strRain, forKeyPath: "gauge") 
    newRainfall.setValue(todaysDate, forKeyPath: "dateRecorded") 
    newRainfall.setValue(sortDateItem, forKeyPath: "sortDate") 


    print(strRain) 
    print(todaysDate) 
    print(sortDateItem) 

    do { 
     try coreDataStack.context.save() 
    } catch let error as NSError { 
     print("Could not save. \(error), \(error.userInfo)") 
    } 
} 

altRainfall.primaryGauge = self.detailItemをSwiftに置き換えるにはどうすればいいですか?

+1

なぜ 'newRainFall.someProperty = someValue'行のすべてを' newRainFall.setValue(someValue、forKeyPath: "someKey") 'に変換していますか? – rmaddy

+0

私はnewRainfall.gauge = strRainなどを試して、エラーを受けてforKeyPathメソッドに切り替えました。 – user1698875

答えて

0

データの保存および更新用。

func saveToDataBase(data:[TestData]){ 
     for data1 in data{ 

      let request:NSFetchRequest<TestData> = TestData.fetchRequest() 
      do { 
       let count = try managedObjectcontext.count(for: request) 
       if count == 0 { 
        // save data according to your requirement. 
        print(data1) 
       }else{ 

        //if anything you want to update then wright here 
       } 

      }catch{ 
       let error = error as NSError 
       print("\(error)") 
      } 
     } 
    } 

あなたは、データを取得するために、次のように行うことができます。

func retriveSaveData(){ 

    let request:NSFetchRequest<TestData> = TestData.fetchRequest() 
    do { 
     let data = try managedObjectcontext.fetch(request) as [TestData] 

     if let str = data.first?.name{ 
      // Your retrieve data 
      print(str) 
     } 
    }catch{ 
     let error = error as NSError 
     print("\(error)") 
    } 
} 

ご希望の場合はお手数ですが、 coredata managerを見に行ったら、サンプルプロジェクトを作った。 project sample

0

答えは非常に悲惨でした!私が行方不明になった行は:

newRainfall.setValue(selectedGauge, forKeyPath: "primaryGauge") 

これは、前のビューから渡されたゲージの名前とデータを関連付けます。だから明らかなのはなぜ私がまだ勉強しようとしているのかということです。おそらく、老衰の始まりを迎えるために、新しいニューラルネットワークを作成するだけです。

関連する問題