2017-12-27 4 views
-1

안녕하세요 전체 & 미리 감사드립니다!프로그래밍 방식으로 코어 데이터 파일의 데이터 변경

저는 Core Data가있는 멍청한 사람이고 recid라는 이름의 필드 중 하나에서 데이터를 변경해야합니다.

내 핵심 데이터 모델에서 recid as int 16을 다시 작성했습니다.

내가해야 할 일은 기록을 가져오고 기록을 변경 한 것입니다. 우리는 5 대 1로 말할 것입니다. 어떻게해야할까요?

여기에 내가 작성한 코드가 있습니다. & 레코드의 데이터를 변경하는 방법을 이해 한 후에 내 루프를 돌볼 것입니다.

-(void)awakeFromNib 
{ 
    NSMenu *theMenu; 
    statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength] retain]; 
    [statusItem setMenu:statusMenu]; 
    [statusItem setImage:[NSImage imageNamed:@"TheJournal_16x16x32"]]; 
    [statusItem setHighlightMode:YES]; 
    theMenu = [[NSMenu alloc] initWithTitle:@""]; 
    [theMenu addItemWithTitle:@"The Journal" action:@selector(showTheWindow:) keyEquivalent:@"W"]; 
    [theMenu addItemWithTitle:@"Quit" action:@selector(terminate:) keyEquivalent:@"Q"]; 
    [statusItem setMenu:theMenu]; 
    [theMenu release]; 

    NSUInteger count; 
    count = 0; 
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
    count = [prefs integerForKey:@"recid"]; 
    NSLog(@"counter is >>>>%lu",(unsigned long)count); 
    [prefs setInteger:count forKey:@"recid"]; 
    count++; 
    NSUserDefaults *prefs1 = [NSUserDefaults standardUserDefaults]; 
    [prefs1 setInteger:count forKey:@"recid"]; 
    NSLog(@"counter is >>>>%lu",(unsigned long)count); 

    // How I fetch the record & change the value from 5 to 1? 
} 
+0

당신이이 요청을 가져 오기 사용하여 시도 적이 있습니까? Apple은 [샘플 코드와 함께 상세한 문서를 제공합니다.] (https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/FetchingObjects.html#//apple_ref/doc/uid/TP40001075-CH6-SW1) . –

+0

또한 코드 스 니펫은 핵심 데이터를 전혀 사용하지 않습니다. 어디에서 사용하고 있습니까? 이 코드는 무엇을합니까? –

+0

핵심 데이터 개체 '레코드'는 어디에 있습니까? 내가보기에 사용자 기본값을 사용하는 것입니다 ... – RLoniello

답변

0

다음은 유용한 코드 샘플입니다. 이 예에서, YourManagedClass 핵심 데이터 엔티티는 UUID 문자열을 고유 한 레코드 식별자로 사용합니다. 확장에는 고유 레코드를 가져 오는 정적 함수가 포함되어 있으며 새 recid 값을 설정 한 다음 NSManagedObjectContext을 저장합니다.

import Foundation 
import CoreData 

class YourManagedClass: NSManagedObject { 
    @NSManaged var uuid: String? 
    @NSManaged var recid: NSNumber? 
} 

extension YourManagedClass { 
    static func set(recID: Int16, forObject uuid: String, `in` context:  NSManagedObjectContext) { 
     let fetchRequest = NSFetchRequest<YourManagedClass>(entityName: "YourManagedClass") 
     fetchRequest.predicate = NSPredicate(format: "uuid = %@", argumentArray: [uuid]) 

     let object: YourManagedClass 
     do { 
      let objects = try context.fetch(fetchRequest) 
      guard let foundObject = objects.first else { 
       return 
      } 

      object = foundObject 
     } catch { 
      // Handle Error 
      return 
     } 

     object.recid = NSNumber(value: recID) 

     do { 
      try context.save() 
     } catch { 
      // Handle Error 
     } 
    } 
} 
당신은 다음 NSManagedObjectContext ('컨텍스트')에 대한 참조로이 함수를 호출 할

:

YourManagedClass.set(recID: 15, forObject: "909455F3-C812-4399-83B4-F96A5C32A71D", in: context) 
관련 문제