小编AAV*_*AAV的帖子

关于核心数据对象更改的 SwiftUI 更新视图

我遇到的问题是,当我从工作表视图更新核心数据资产对象时,更改不会反映在 AssetListView 的 UI 中。(请注意,从工作表视图插入新对象刷新 AssetListView 的 UI。在工作表视图中删除对象也会刷新AssetListView 的 UI)唯一不起作用的操作是更新。

当核心数据对象发生变化时,如何使 AssetListView 发生变化?

我有以下 SwiftUI 代码显示来自 CoreData FetchRequest 的资产列表:

struct AssetListView: View {
    @State private var showingSheet = false
    @State private var selectedAssetId: NSManagedObjectID?
    @Environment(\.managedObjectContext) var moc
    @FetchRequest(entity: Asset.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \Asset.allocationPercentage, ascending: false)]) var assets: FetchedResults<Asset>
    
    var body: some View {
        VStack {
            Form {
                 ForEach(assets, id: \.self) { asset in
                    Section {
                        AssetRowView(asset: asset)
                            .onTapGesture {
                                self.selectedAssetId = asset.objectID
                                self.showingSheet = …
Run Code Online (Sandbox Code Playgroud)

core-data ios swift swiftui

4
推荐指数
1
解决办法
2765
查看次数

SwiftUI 绑定到 foreach 内的核心数据对象

我无法将 core Data 对象中的 bookName 绑定到循环内的 TextField ForEach。我怎样才能让这个绑定工作?我希望该bookName值在更改时保存到核心数据中。

我收到一条错误消息:无法在范围内找到 $book。

extension Book: Identifiable {
    @nonobjc public class func fetchRequest() -> NSFetchRequest<Book> {
        return NSFetchRequest<Book>(entityName: "Book")
    }
    
    @NSManaged public var id: UUID?
    @NSManaged public var bookName: String?
    
    var wrappedBookName: String {
        bookName ?? ""
    }
}

struct BookListView: View {
    @FetchRequest(entity: Book.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \Book.rankNumber, ascending: false)]) var books: FetchedResults<Book>
    
    var body: some View {
        ForEach(books) { book in
            TextField("Book Name", text: $book.bookName)  //Error: cannot find $book in …
Run Code Online (Sandbox Code Playgroud)

core-data swiftui combine

3
推荐指数
1
解决办法
1705
查看次数

实体框架交易错误

我正在使用实体框架,我有几种方法,我正在使用事务.我收到此错误:连接已在事务中,无法参与另一个事务.EntityClient不支持并行事务. 我有多种方法,取决于'MethodB',如下面的代码示例:

public void MethodA(){
    using (var tran = Db.Database.BeginTransaction()){  
        MethodB();
        var tableARecord = new TableARecord();
        try
        {
            _context.TableAs.Add(tableARecord)
            Db.SaveChanges();
        }
        catch (Exception excp)
        {
            tran.Rollback();
            throw;
        }
    }
 }

 public void MethodC(){
    using (var tran = Db.Database.BeginTransaction()){  
        MethodB();
        //do something else
    }
 }

 public int MethodB(){
    int ret = 0
    //exception happens when starting the transaction below
    using (var tran = Db.Database.BeginTransaction()){  
        //do something else
    }
    return ret;
 }
Run Code Online (Sandbox Code Playgroud)

c# entity-framework transactions

2
推荐指数
2
解决办法
6028
查看次数

标签 统计

core-data ×2

swiftui ×2

c# ×1

combine ×1

entity-framework ×1

ios ×1

swift ×1

transactions ×1