首页 > 解决方案 > SwiftUI - AsyncImage 导致大量 tmp 文件夹?

问题描述

所以我有一个令人困惑的情况。我正在AsyncImage根据规范加载多个 SwiftUI (参见下面的代码)。出于某种原因,我的 1MB 应用程序包含超过 400 MB 的文档和数据。当我查看应用程序的容器时,我可以看到它是由“tmp”文件夹中大量以“CFNetworkDownload”开头的图像作为.tmp 文件引起的。似乎每次加载图像时,它都存储在此处,但不会删除。这使得应用程序每次打开时都会变大。对于这个问题我能做些什么?非常感谢!(PS 为了便于阅读,我试图尽可能地压缩我的代码,但是由于我不确定问题出在哪里,所以包含了一些文件。)

主应用 Swift 文件:

@main
struct MyApp: App {
    let monitor = NWPathMonitor()
    @State private var isConnected = true
    
    var body: some Scene {
        monitor.pathUpdateHandler = { path in
            if path.status == .satisfied {
                if !isConnected {
                    isConnected.toggle()
                }
            }
            
            else {
                if isConnected {
                    isConnected.toggle()
                }
            }
        }
        
        let queue = DispatchQueue(label: "Monitor")
        
        monitor.start(queue: queue)
        
        return WindowGroup {
            isConnected ? AnyView(ContentView()) : AnyView(ContentViewFailed())
        }
    }
}

ContentView在上面的 WindowGroup 中加载的那个:

struct ContentView: View {
    var body: some View {
        TabView {
            HomeView()
            .tabItem {
                Image(systemName: "house.fill")
                Text("Home")
            }
            
            . . .
        }
    }
}

最后,HomeView加载图像的位置:

struct HomeView: View {
    var body: some View {
        let urlString = "https://www.example.com/Home.json"
            
        if let url = URL(string: urlString) {
            if let data = try? Data(contentsOf: url) {
                do {
                    items = try JSONDecoder().decode([Item].self, from: data)
                }

                catch {
                    print(error)
                }
            }
        }
        
        return NavigationView {
            List {
                ScrollView {
                    VStack(alignment: .leading) {
                        ZStack {
                            VStack(alignment: .leading) {
                                Spacer()
                                
                                HStack {
                                    AsyncImage(url: URL(string: "https://www.example.com/images/example.png")) { image in
                                        image
                                            .resizable()
                                            .aspectRatio(contentMode: .fill)
                                            .shadow(color: Color(red: 0, green: 0, blue: 0, opacity: 0.25), radius: 1)
                                    } placeholder: {
                                        ProgressView()
                                            .progressViewStyle(.circular)
                                    }
                                    .frame(width: 202, height: 100)
                                }
                                
                                . . .
                            }
                        }
                    }
                }
            }
        }
    }
}

我真的很感谢你的时间。不确定这是否只是AsyncImage本身的错误。

标签: iosswiftswiftui

解决方案


推荐阅读