Как сохранить данные отношения один-много в базовые данные, используя Objective- C - PullRequest
0 голосов
/ 31 марта 2020

У меня есть новостной элемент, и многие пользователи поделились этим новостным элементом. Мне нужно сохранить много пользователей для одного новостного элемента. У меня было одно-многократное отношение от newsFeedItem к SlickUser. но я не знаю, как я могу сохранить или связать данные SlickUser с newsFeedItem. извините, я новичок в основных данных и не могу сохранить данные, используя отношения один ко многим. если кто-нибудь может подсказать мне, как я могу использовать SlickOwner для сохранения данных в newsFeedItem

for(int i =0 ; i < posts.user.count ; i++)
            {
SlickUser * user = posts.user[i];
                 if (self.contactdb) { 
                     [self.contactdb setValue:user.Aprovider forKey:@"Aprovider"];
                    [self.contactdb setValue:user.name forKey:@"name"];
                     [self.contactdb setValue:user.userid forKey:@"userid"];
  }
                else{

    NSManagedObject *newdevice = [NSEntityDescription insertNewObjectForEntityForName:@"SlickUser"  inManagedObjectContext:context];
                                  [newdevice setValue:user.Aprovider forKey:@"Aprovider"];
                                  [newdevice setValue:user.name forKey:@"name"];
                                  [newdevice setValue:user.userid forKey:@"userid"];
 NSError *error = nil;
                              if (![context sa[here is the image for newsFeedItem ][1]ve:&error])
                              {
                                  NSLog(@"can't save %@ %@", error, [error localizedDescription]);
                              }
}

}, то здесь есть объект NewsFeedItem:

extension NewsFeedDataItem {

    @nonobjc public class func fetchRequest() -> NSFetchRequest<NewsFeedDataItem> {
        return NSFetchRequest<NewsFeedDataItem>(entityName: "NewsFeedDataItem")
    }
     @NSManaged public var aprovider: String?
     @NSManaged public var lid: String?
     @NSManaged public var owner: NSSet?
 }
xtension NewsFeedDataItem {

    @objc(addOwnerObject:)
    @NSManaged public func addToOwner(_ value: SlickUser)

    @objc(removeOwnerObject:)
    @NSManaged public func removeFromOwner(_ value: SlickUser)

    @objc(addOwner:)
    @NSManaged public func addToOwner(_ values: NSSet)

    @objc(removeOwner:)
    @NSManaged public func removeFromOwner(_ values: NSSet)

}

, а это объект UserSlick:

extension SlickUser {

    @nonobjc public class func fetchRequest() -> NSFetchRequest<SlickUser> {
        return NSFetchRequest<SlickUser>(entityName: "SlickUser")
    }
    @NSManaged public var aprovider: Int64
    @NSManaged public var userid: String?
    @NSManaged public var userPic: String?
    @NSManaged public var newsFeedPost: NewsFeedDataItem?
}

это скриншот для slickUser

1 Ответ

0 голосов
/ 03 апреля 2020

Вам не хватает дополнительных отношений между вашими SlickUser и NewsFeedDataItem. У вас есть одно отношение один-ко-многим , определенное между вашим пользователем и item - NewsFeedDataItem.owner -> SlickUser - и обратным к этому отношению SlickUser.newsFeedPost -> NewsFeedDataItem.

Вот некоторые предположения о том, чего вы пытаетесь достичь:

  • An Элемент принадлежит Пользователю [one -в-одном]
  • Элемент Элемент может совместно использовать многие Пользователь [один-ко-многим]
  • A Пользователь может быть владельцем многих Элемент [один ко многим]
  • A Пользователь может делиться многими Элемент [один-ко -мани]

То, что здесь определено, представляет четыре (4) отношения между вашим Пользователем и Элементом .

Вот как я мы настроили все:

NewsFeedDataItem NewsFeedDataItem Entity

import Foundation
import CoreData

@objc(NewsFeedDataItem)
public class NewsFeedDataItem: NSManagedObject {

}

extension NewsFeedDataItem {

    @nonobjc public class func fetchRequest() -> NSFetchRequest<NewsFeedDataItem> {
        return NSFetchRequest<NewsFeedDataItem>(entityName: "NewsFeedDataItem")
    }

    @NSManaged public var aprovider: String?
    @NSManaged public var lid: String?
    @NSManaged public var owner: SlickUser?
    @NSManaged public var sharedBy: NSSet?

}

// MARK: Generated accessors for sharedBy
extension NewsFeedDataItem {

    @objc(addSharedByObject:)
    @NSManaged public func addToSharedBy(_ value: SlickUser)

    @objc(removeSharedByObject:)
    @NSManaged public func removeFromSharedBy(_ value: SlickUser)

    @objc(addSharedBy:)
    @NSManaged public func addToSharedBy(_ values: NSSet)

    @objc(removeSharedBy:)
    @NSManaged public func removeFromSharedBy(_ values: NSSet)

}

SlickUser enter image description here

import Foundation
import CoreData

@objc(SlickUser)
public class SlickUser: NSManagedObject {

}

extension SlickUser {

    @nonobjc public class func fetchRequest() -> NSFetchRequest<SlickUser> {
        return NSFetchRequest<SlickUser>(entityName: "SlickUser")
    }

    @NSManaged public var aprovider: Int64
    @NSManaged public var userid: String?
    @NSManaged public var userPic: String?
    @NSManaged public var userPosts: NSSet?
    @NSManaged public var sharedPosts: NSSet?

}

// MARK: Generated accessors for userPosts
extension SlickUser {

    @objc(addUserPostsObject:)
    @NSManaged public func addToUserPosts(_ value: NewsFeedDataItem)

    @objc(removeUserPostsObject:)
    @NSManaged public func removeFromUserPosts(_ value: NewsFeedDataItem)

    @objc(addUserPosts:)
    @NSManaged public func addToUserPosts(_ values: NSSet)

    @objc(removeUserPosts:)
    @NSManaged public func removeFromUserPosts(_ values: NSSet)

}

// MARK: Generated accessors for sharedPosts
extension SlickUser {

    @objc(addSharedPostsObject:)
    @NSManaged public func addToSharedPosts(_ value: NewsFeedDataItem)

    @objc(removeSharedPostsObject:)
    @NSManaged public func removeFromSharedPosts(_ value: NewsFeedDataItem)

    @objc(addSharedPosts:)
    @NSManaged public func addToSharedPosts(_ values: NSSet)

    @objc(removeSharedPosts:)
    @NSManaged public func removeFromSharedPosts(_ values: NSSet)

}

  • SlickUser.userPosts - это набор предметов , которые принадлежат Пользователю .
  • NewsFeedDataItem.owner является владельцем Item .
  • NewsFeedDataItem.sharedBy - это набор Пользователь , которые совместно использовали Item .

Для каждой из пар отношений owner <> userPosts и sharedBy <> sharedPosts , вам потребуется установить хотя бы одну сторону отношений для вашего управляемого объекта. CoreData будет управлять остальными.

Соответствует ли это решение потребностям вашего проекта?

...