8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

如何限制 UITableView 中的行数,然后在“查看全部”按钮单击时显示所有行 swift iOS

A. D'Alfonso 2月前

287 0

我想限制 tableView 中的行数,比如说我最初只想显示 2 行,如果用户单击“查看全部”按钮,则显示所有行。tableView 的数据(数组)来自...

我想限制 tableView 中的行数,比如说我最初只想显示 2 行,如果用户单击“查看全部”按钮,则显示所有行。tableView 的数据(数组)来自 CoreData。我已将所有数据输入(保存)到另一个 ViewController 中,并在另一个 ViewController 上获取数据。可能存在数据为零的情况。目前,我正在显示所有行,就像 --> return array.count 一样,但我不知道如何实现我的条件?

帖子版权声明 1、本帖标题:如何限制 UITableView 中的行数,然后在“查看全部”按钮单击时显示所有行 swift iOS
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由A. D'Alfonso在本站《uitableview》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 我想将详细信息页面中的所有数据传输到购物车页面(即 tableView)。我的主要问题是,即使在详细信息屏幕中按下,CartScreen 页面中的数组仍然是空的...

    我想将详细信息页面中的所有数据传输到购物车页面(即 tableView)。我的主要问题是,即使在详细信息屏幕中我按下添加到购物车按钮(这可以正常工作),CartScreen 页面中的数组仍然为空。我正在使用 MVVM 设计,因此这里有一个 repo 类

    class FoodsDaoRepository {
        var foodList = BehaviorSubject <[Foods]>(value: [Foods]())
        var cartList = BehaviorSubject <[FoodsCart]>(value: [FoodsCart]())
    
         var cartList = BehaviorSubject <[FoodsCart]>(value: [FoodsCart]())
    
          func getFromCart (userName: String) {
            let params: Parameters = ["userName" : userName]
            AF.request("http://example.com/foods/getFoodsCart.php", method: .post, parameters: params).response {response in
                if let data = response.data {
                    do{
                        let result = try JSONDecoder().decode(CartResponse.self, from: data)
                        if let list = result.cart {
                            self.cartList.onNext(list)
                            print(list)
                        }
                    } catch {
                        print(error.localizedDescription)
                    }
                }
            }
        }
    
    

    购物车响应类

    struct CartResponse : Codable {
    var cart : [FoodsCart]? }
    

    FoodsCart 类

    class FoodsCart : Codable {
    var cartId : Int
    var name : String
    var image : String
    var price : Int
    var category : String
    var orderAmount : Int
    var userName = "rustin_wilde"
    
     init(cartId: Int, name: String, image: String, price: Int, category: String, orderAmount: Int, userName: String = "rustin_wilde") {
        self.cartId = cartId
        self.name = name
        self.image = image
        self.price = price
        self.category = category
        self.orderAmount = orderAmount
        self.userName = userName
    }
    

    }

    产品表视图单元格类

    class ProductsTableViewCell: UITableViewCell {
    
    @IBOutlet var productImageCart: UIImageView!
    
    @IBOutlet var productNameCart: UILabel!
    
    @IBOutlet var productCategory: UILabel!
    @IBOutlet var productAmountCart: UILabel!
    
    
    @IBOutlet var productTotalPrice: UILabel!
    @IBOutlet var userName: UILabel!
    
    @IBOutlet var viewCart: UIView!
    
    override func awakeFromNib() {
        super.awakeFromNib()
        
    }
    
    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
    
        // Configure the view for the selected state
    }
    
    func configure(item : FoodsCart) {
        
        let url = URL(string: "http://example.com/foods/images/" + item.image)
        productImageCart.kf.setImage(with: url)
        productNameCart.text = item.name
        productCategory.text = item.category
        productTotalPrice.text = "\(item.price)"
        productAmountCart.text = String(item.price)
        userName.text = item.userName
        
    }}
    

    CartScreen 类

        class CartScreen : UIViewController, UITableViewDelegate, UITableViewDataSource {
    
        @IBOutlet var cartTableView: UITableView!
        
        var cart : FoodsCart?
        var foodsCart = [FoodsCart]()
        var viewModel = CartViewModel()
        
       public var userName = "rustin_wilde"
        
        override func viewDidLoad() {
            super.viewDidLoad()
            
            
            let _ = viewModel.cartList.subscribe(onNext: { list in
                self.foodsCart = list
                DispatchQueue.main.async {
                    self.cartTableView.reloadData()
                }
            })
            
            cartTableView.delegate = self
            cartTableView.dataSource = self
            
            //register xib
            cartTableView.register(UINib(nibName: "ProductsTableViewCell", bundle: nil), forCellReuseIdentifier: "ProductsTableViewCell")      
        }
        
        override func viewWillAppear(_ animated: Bool) {
            viewModel.getFromCart(userName: userName)
            
        }
    
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return foodsCart.count
        }
     
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            
            let foodCart = foodsCart[indexPath.row]
            
            let cell = cartTableView.dequeueReusableCell(withIdentifier: "productCell") as! ProductsTableViewCell
            cell.configure(item: foodCart)
            return cell        
        }
    }
    
  • 嘿,每次我点击表格视图中的任何单元格时,都会出现“线程 1:致命错误:索引超出范围”(在此行 selectedId = idArray[indexPath.row] )错误。我该如何解决这个问题。我

    嘿,每次我点击表格视图中的任何单元格时,都会出现“线程 1:致命错误:索引超出范围”(在此行 selectedId = idArray[indexPath.row] )错误。我该如何解决这个问题。我认为我的数组有问题,但我搞不清楚。我在上一个应用程序中做了同样的事情,但我没有收到任何错误。

      import UIKit
      import CoreData
    
    class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    @IBOutlet weak var tableView: UITableView!
    var nameArray = [String]()
    var idArray = [UUID?]()
    var selectedName = ""
    var selectedId : UUID?
    override func viewDidLoad() {
        super.viewDidLoad()
        
        tableView.delegate = self
        tableView.dataSource = self
        
        navigationController?.navigationBar.topItem?.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.add, target: self, action: #selector(addNewPatient))
       getData()
    }
    
    override func viewWillAppear(_ animated: Bool) {
        NotificationCenter.default.addObserver(self, selector: #selector(getData) , name: NSNotification.Name(rawValue: "newData"), object: nil)
     
    }
    
    @objc func getData() {
    nameArray.removeAll(keepingCapacity: false)
    idArray.removeAll(keepingCapacity: false)
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        let context = appDelegate.persistentContainer.viewContext
        let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "ToName")
        fetchRequest.returnsObjectsAsFaults = false
        
        do {
            
            let results = try context.fetch(fetchRequest)
            if results.count > 0 {
            for result in results as! [NSManagedObject] {
                if let name = result.value(forKey: "name") as? String {
                    self.nameArray.append(name)
                }
                if let id = result.value(forKey: "id") as? UUID {
                    self.idArray.append(id)
                }
            }
            }
        } catch {
            print("error")
        }
        
        tableView.reloadData()
        
    }
    
    
    
    @objc func addNewPatient() {
        selectedName = ""
        performSegue(withIdentifier: "toNameVC", sender: nil)
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return nameArray.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell()
        var content = cell.defaultContentConfiguration()
        content.text = nameArray[indexPath.row]
              // content.secondaryText = "secondary test"
               cell.contentConfiguration = content
               return cell
    }
    
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "toNameVC" {
            let destinationVC = segue.destination as! ToNameViewController
            destinationVC.choosenName = selectedName
            destinationVC.choosenId = selectedId
        }
    }
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        selectedName = nameArray[indexPath.row]
        selectedId = idArray[indexPath.row]
        performSegue(withIdentifier: "toNameVC", sender: nil)
    }
    

    }

    这是我的 toNameViewController.swift 页面

     ToNameViewController.swift
     Patient Record App
    
    
    import UIKit
    import CoreData
    
    class ToNameViewController: UIViewController {
    
    @IBOutlet weak var nameLabelText: UITextField!
    @IBOutlet weak var tcLabelText: UITextField!
    @IBOutlet weak var birthDateLabelText: UITextField!
    var choosenName = ""
    var choosenId : UUID?
    override func viewDidLoad() {
        super.viewDidLoad()
        
        if choosenName != "" {
            let appDelegate = UIApplication.shared.delegate as! AppDelegate
            let context = appDelegate.persistentContainer.viewContext
            let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "ToName")
            let idString = choosenId?.uuidString
            fetchRequest.predicate = NSPredicate(format: "id = %@", idString!)
            fetchRequest.returnsObjectsAsFaults = false
            do {
                let results = try context.fetch(fetchRequest)
                if results.count > 0 {
                    for result in results as! [NSManagedObject] {
                        if let name = result.value(forKey: "name") as? String {
                            nameLabelText.text = name
                        }
                        if let tc = result.value(forKey: "tc") as? Int {
                            tcLabelText.text = String(tc)
                        }
                        if let birth = result.value(forKey: "birth") as? Int {
                            birthDateLabelText.text = String(birth)
                        }
                    }
                }
            } catch {
                print("error")
            }
        }else {
            
        }
        
        let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(hiddenKeyboard))
        view?.addGestureRecognizer(gestureRecognizer)
        
    }
    
    @objc func hiddenKeyboard() {
        
        view?.endEditing(true)
    }
    
    @IBAction func saveButton(_ sender: Any) {
        
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        let context = appDelegate.persistentContainer.viewContext
        let newPatient = NSEntityDescription.insertNewObject(forEntityName: "ToName", into: context)
        
        newPatient.setValue(nameLabelText.text, forKey: "name")
        if let tc = Int(tcLabelText.text!) {
            newPatient.setValue(tc, forKey: "tc")
        }
        if let birth = Int(birthDateLabelText.text!) {
            newPatient.setValue(birth, forKey: "birth")
        }
        do {
            try context.save()
            print("saved")
        } catch {
            print("error")
        }
        
        NotificationCenter.default.post(name: NSNotification.Name("newData"), object: nil)
        self.navigationController?.popViewController(animated: true)
    }
    

    }

  • 我无法弄清楚以下问题:我制作了一个应该可用于多种苹果设备的菜单。我在 xcode 的几个模拟器(现在是 14.2)中对其进行了测试。有些模拟器运行良好,但不是全部......

    我无法弄清楚以下问题:我制作了一个应该可用于多种苹果设备的菜单。我在 xcode 的几个模拟器(现在是 14.2)中对其进行了测试。有些模拟器运行良好,但不是全部。

    例如,模拟器不会激活 CollectionView 中的 didSelectItemAt:

    • iPad Air(第四代 - iOS 14.2)- 1180.0、820.0
    • iPad 第 10 代 - iOS 16.2
    • iPad Pro 11.0 英寸(第二代)(iOS 14.2)1194.0,834.0
    • iPad Pro 12.9 英寸 1366.0, 1024.0
    • 菜单的布局看起来不错,而且运行良好。

    在模拟器中 didSelectItemAt 运行良好:

    • iPhone 11 Pro
    • iPhone 12-iOS 14.2-844.0,390.0
    • iPad Air 2 - iOS 14.2 - 1024.0, 768.0
    • iPad(第六代 - iOS 16.2)1024.0、768.0
    • iPad(第 9 代 - iOS 16.2)1080.0、810.0
    • iPad Pro(9.7 英寸 - iOS 14.4)1024.0, 768.0

    我发现在 Debug ViewHierachy 中,例如 ipad Air 2 和 ipad 11 Pro 之间存在差异。iPad 11 Pro 增加了一个我无法解释的额外 UIView。我认为这超出了项目范围。我想这就是为什么在使用 eq iPad 11 Pro 时无法选择项目的原因。但我不知道如何调整它。(另见图片)。

    iPad Air 2

    iPad Air 2

    iPad 11 Pro

    iPad 11 Pro

  • 我正在尝试设置一个聊天应用程序,但目前,我被困在一个 UI 点上,UI 部分无法正确处理。现在,我试图显示带有文本消息的图像,但我的 UI 部分不起作用

    我正在尝试设置一个聊天应用程序,但目前我被困在一个 UI 点上,UI 部分无法正确处理。现在,我试图显示带有文本消息的图像,但我的 UI 部分无法正常工作。请查看随附的屏幕截图。

    该屏幕截图取自 iPhone。

    Image

    以下是我想做的事情:

    Image

    代码:-

    我只发布了发送方部分,因为左侧(接收方)使用了相同的代码。

    import UIKit
    
    class SenderTVC: UITableViewCell {
        @IBOutlet weak var senderImage: UIImageView!
        @IBOutlet weak var lblSenderMsg: UILabel!
        @IBOutlet weak var lblSenderTime: UILabel!
    }
    

    老师

    Image

    问题:如何显示带有文字的图像,如原始图像(第二张屏幕截图)所示?

    有人能向我解释一下如何在同一个单元格中显示带有文字的大尺寸图像吗 table view ?我试过了,但还没有结果。

  • 由于工作需要,我将 Windows 电脑换成了 MacBook Pro,它搭载 Apple M3 Pro(36 GB),运行 macOS Sonoma(版本 14.5)。我发现了一些非常奇怪的事情。在一个小的

    由于工作需要,我将 Windows 电脑换成了 MacBook Pro,它搭载 Apple M3 Pro(36 GB),运行 macOS Sonoma(版本 14.5)。我发现了一些非常奇怪的事情。在一个小的示例脚本中,我设法提取了这个问题的根本原因。

    当我在 tensorflow/keras 之前导入 pandas 时,脚本会冻结。反之亦然。

    剧本:

    import numpy as np
    import os
    import pandas as pd
    from tensorflow.keras import layers, models
    
    print("Creating simple model...")
    try:
        model = models.Sequential([
            layers.Input(shape=(10,)),
            layers.Dense(64, activation='relu'),
            layers.Dense(1, activation='linear')
        ])
        print("Model created successfully.")
    except Exception as e:
        print(f"Error creating model: {e}")
    
    x_train = np.random.rand(100, 10)
    y_train = np.random.rand(100, 1)
    
    # Compile the model
    model.compile(optimizer='adam', loss='mean_squared_error')
    
    # Train the model
    try:
        model.fit(x_train, y_train, epochs=5, batch_size=32)
        print("Model training completed successfully.")
    except Exception as e:
        print(f"Error during training: {e}")
    

    运行时,给出以下输出:

    Creating simple model...
    2024-05-31 18:04:07.639131: I metal_plugin/src/device/metal_device.cc:1154] Metal device set to: Apple M3 Pro
    2024-05-31 18:04:07.639149: I metal_plugin/src/device/metal_device.cc:296] systemMemory: 36.00 GB
    2024-05-31 18:04:07.639154: I metal_plugin/src/device/metal_device.cc:313] maxCacheSize: 13.50 GB
    2024-05-31 18:04:07.639170: I tensorflow/core/common_runtime/pluggable_device/pluggable_device_factory.cc:305] Could not identify NUMA node of platform GPU ID 0, defaulting to 0. Your kernel may not have been built with NUMA support.
    2024-05-31 18:04:07.639186: I tensorflow/core/common_runtime/pluggable_device/pluggable_device_factory.cc:271] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 0 MB memory) -> physical PluggableDevice (device: 0, name: METAL, pci bus id: <undefined>)
    

    脚本在此时冻结,必须终止。当我交换导入的顺序时

    from tensorflow.keras import layers, models
    import pandas as pd
    

    我得到以下信息:

    Creating simple model...
    2024-05-31 18:07:18.879661: I metal_plugin/src/device/metal_device.cc:1154] Metal device set to: Apple M3 Pro
    2024-05-31 18:07:18.879680: I metal_plugin/src/device/metal_device.cc:296] systemMemory: 36.00 GB
    2024-05-31 18:07:18.879685: I metal_plugin/src/device/metal_device.cc:313] maxCacheSize: 13.50 GB
    2024-05-31 18:07:18.879705: I tensorflow/core/common_runtime/pluggable_device/pluggable_device_factory.cc:305] Could not identify NUMA node of platform GPU ID 0, defaulting to 0. Your kernel may not have been built with NUMA support.
    2024-05-31 18:07:18.879717: I tensorflow/core/common_runtime/pluggable_device/pluggable_device_factory.cc:271] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 0 MB memory) -> physical PluggableDevice (device: 0, name: METAL, pci bus id: <undefined>)
    Model created successfully.
    Epoch 1/5
    2024-05-31 18:07:19.269585: I tensorflow/core/grappler/optimizers/custom_graph_optimizer_registry.cc:117] Plugin optimizer for device_type GPU is enabled.
    4/4  1s 16ms/step - loss: 0.1177 
    Epoch 2/5
    4/4  0s 5ms/step - loss: 0.1078 
    Epoch 3/5
    4/4  0s 5ms/step - loss: 0.0932 
    Epoch 4/5
    4/4  0s 5ms/step - loss: 0.1008 
    Epoch 5/5
    4/4  0s 5ms/step - loss: 0.0865 
    Model training completed successfully.
    

    请注意,我在脚本中甚至没有使用 pandas。作为参考,我导入了 os,但也没有在脚本的任何地方使用它,但这不会影响它。

    以下是我的环境包 pip 列表:

    Package                      Version
    ---------------------------- -----------
    absl-py                      2.1.0
    astunparse                   1.6.3
    Bottleneck                   1.3.7
    cachetools                   5.3.3
    certifi                      2024.2.2
    charset-normalizer           3.3.2
    db-dtypes                    1.2.0
    flatbuffers                  24.3.25
    gast                         0.5.4
    google-api-core              2.19.0
    google-auth                  2.29.0
    google-cloud-bigquery        3.23.1
    google-cloud-core            2.4.1
    google-crc32c                1.5.0
    google-pasta                 0.2.0
    google-resumable-media       2.7.0
    googleapis-common-protos     1.63.0
    grpcio                       1.64.0
    grpcio-status                1.62.2
    h5py                         3.11.0
    idna                         3.7
    importlib_metadata           7.1.0
    joblib                       1.4.2
    keras                        3.3.3
    libclang                     18.1.1
    Markdown                     3.6
    markdown-it-py               3.0.0
    MarkupSafe                   2.1.5
    mdurl                        0.1.2
    ml-dtypes                    0.3.2
    namex                        0.0.8
    numexpr                      2.8.7
    numpy                        1.26.4
    opt-einsum                   3.3.0
    optree                       0.11.0
    packaging                    24.0
    pandas                       2.2.1
    pip                          24.0
    proto-plus                   1.23.0
    protobuf                     4.25.3
    pyarrow                      16.1.0
    pyasn1                       0.6.0
    pyasn1_modules               0.4.0
    Pygments                     2.18.0
    python-dateutil              2.9.0.post0
    pytz                         2024.1
    requests                     2.32.3
    rich                         13.7.1
    rsa                          4.9
    scikit-learn                 1.4.2
    scipy                        1.11.4
    setuptools                   69.5.1
    six                          1.16.0
    tensorboard                  2.16.2
    tensorboard-data-server      0.7.2
    tensorflow                   2.16.1
    tensorflow-io-gcs-filesystem 0.37.0
    tensorflow-macos             2.16.1
    tensorflow-metal             1.1.0
    termcolor                    2.4.0
    threadpoolctl                3.5.0
    tqdm                         4.66.4
    typing_extensions            4.12.0
    tzdata                       2024.1
    urllib3                      2.2.1
    Werkzeug                     3.0.3
    wheel                        0.43.0
    wrapt                        1.16.0
    zipp                         3.19.0
    

    来自评论的建议 (@Ze'ev Ben-Tsvi)

    import numpy as np
    import os
    import pandas as pd
    from tensorflow.keras import layers, models
    
    print("Creating simple model...")
    
    try:
        print("Initializing Sequential model...")
        model = models.Sequential()
        print("Adding input layer...")
        model.add(layers.Input(shape=(10,)))
        print("Adding first Dense layer...")
        model.add(layers.Dense(64, activation='relu'))
        print("Adding output Dense layer...")
        model.add(layers.Dense(1, activation='linear'))
        print("Model created successfully.")
    except Exception as e:
        print(f"Error creating model: {e}")
    
    x_train = np.random.rand(100, 10)
    y_train = np.random.rand(100, 1)
    
    # Compile the model
    try:
        print("Compiling model...")
        model.compile(optimizer='adam', loss='mean_squared_error')
        print("Model compiled successfully.")
    except Exception as e:
        print(f"Error during compilation: {e}")
    
    # Train the model
    try:
        print("Training model...")
        model.fit(x_train, y_train, epochs=5, batch_size=32)
        print("Model training completed successfully.")
    except Exception as e:
        print(f"Error during training: {e}")
    

    该脚本的输出是:

    Initializing Sequential model...
    Adding input layer...
    Adding first Dense layer...
    Adding output Dense layer...
    Model created successfully.
    Compiling model...
    Model compiled successfully.
    Training model...
    Epoch 1/5
    

    这样写的话,执行起来似乎更进一步。现在它不再卡在 models.Sequential 上,而是卡在 model.fit 上。

    再次交换导入的顺序(先 tensorflow 再 pandas)我得到:

    Creating simple model...
    Initializing Sequential model...
    Adding input layer...
    Adding first Dense layer...
    Adding output Dense layer...
    Model created successfully.
    Compiling model...
    Model compiled successfully.
    Training model...
    Epoch 1/5
    4/4  0s 1ms/step - loss: 0.4620  
    Epoch 2/5
    4/4  0s 636us/step - loss: 0.3263
    Epoch 3/5
    4/4  0s 1ms/step - loss: 0.2322 
    Epoch 4/5
    4/4  0s 629us/step - loss: 0.1395
    Epoch 5/5
    4/4  0s 690us/step - loss: 0.1251
    Model training completed successfully.
    

    这里的主要问题是,我从来没有遇到过异常,即使将所有导入单独包装在 try/catch 块中也没有。似乎有一些东西要么吞掉错误,要么什么都没有抛出。

  • 我目前正在使用以下代码对几个时期的网络进行微调:es= keras.callbacks.EarlyStopping(monitor='loss', min_delta=1e-4,patience=10, verbose=True, restore_best_weights=True)

    我目前正在使用以下代码对网络进行几个时期的微调:

    es= keras.callbacks.EarlyStopping(monitor='loss', min_delta=1e-4,patience=10, verbose=True, restore_best_weights=True)
    history = model.fit(ft, steps_per_epoch=len(ft), callbacks=[es], epochs=150, verbose=verbose)
    model.save('model_best.h5')
    

    在 10 个时期(由 确定) monitor='loss' 内损失(由 监控)没有任何改善 patience=10 EarlyStopping 回调,并保存恢复到最佳遇到的权重的模型权重。

    的情况 回调 ——比如,如果没有 10 个没有改进的 epoch 序列,但表现最好的 epoch 不是最后一个。在这种情况下,哪些权重会被保存?它们是来自最后一个 epoch 的权重还是来自训练期间观察到的最佳 epoch 的权重?值得注意的是,当 verbose=True EarlyStopping EarlyStopping 不触发时,它不会产生任何输出,这让我不确定哪个模型版本被保留了。有人能解释一下在这种情况下会发生什么吗?

  • 我遇到了一个不寻常的问题,在互联网上也找不到。我在 TensorFlow 2.15 上训练了一个分类模型。这个模型运行完美,但是当我尝试导入它时……

    我遇到了一个不寻常的问题,在互联网上也找不到。我在 TensorFlow 2.15 上训练了一个分类模型。这个模型运行完美,但当我尝试导入该模型时,出现以下错误。

    ValueError:参数 的值无效 reduction 。应为 {'sum', 'none', 'sum_over_batch_size', None} 之一。收到:reduction=auto

    预期的结果是,我的在 tensorflow 2.15 版本中训练的模型可以导入到 tensorflow 2.16 中并运行。

    任何关于此问题的帮助都将不胜感激。谢谢。

  • 我一直在尝试在 Windows 11 中的 WSL 上安装支持 GPU 的 Tensorflow 2.16.1。我的 Linux 安装是 Ubuntu 22.04。我一直按照这里的说明操作。这个过程需要我

    我一直在尝试在 Windows 11 中的 WSL 上安装支持 GPU 的 Tensorflow 2.16.1。我的 Linux 安装是 Ubuntu 22.04。我一直按照 这里的 。该过程要求我安装 cudnn 8.6.0,我正在尝试从 此处 。我已经在 Windows 中下载了适用于 cuda 11.x 的存档(Ubuntu22.04 x86_64 (Deb) 的本地安装程序),在 WSL 中挂载了下载位置并尝试从 bash 提示符运行脚本文件。但是,执行此操作时,我立即收到错误“意外标记换行符附近的语法错误”,并且安装中止。有人可以帮我解决这个问题吗?其次,我可以使用 conda 本身安装 cudnn 8.6 吗?如果是这样,我想了解一下。

    我已经为脚本提供了执行权限,但这没有什么区别。

  • 向数组添加扩展:

    extension Array {
        func object(at index: Int) -> Element? { 
            if index < count {
                return self[index]
            } else {
                return nil
            }
        }
    }
    

    现在,无论何时从数组访问元素,都可以使用此方法。

  • Keks 2月前 0 只看Ta
    引用 11

    getData 函数中,你可以将值附加到 idArray 。但是 result.value(forKey: "id") 是可选的,除非 ,否则会附加值 nil nameArray 之间的计数可能会有所不同 idArray 。因此,如果 result.value(forKey: "id") 为零,则将默认值附加到 idArray .

    @objc func getData() {
        nameArray.removeAll(keepingCapacity: false)
        idArray.removeAll(keepingCapacity: false)
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        let context = appDelegate.persistentContainer.viewContext
        let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "ToName")
        fetchRequest.returnsObjectsAsFaults = false
        
        do {
            
            let results = try context.fetch(fetchRequest)
            if results.count > 0 {
                for result in results as! [NSManagedObject] {
                    if let name = result.value(forKey: "name") as? String {
                        self.nameArray.append(name)
                        //change here like this
                        if let id = result.value(forKey: "id") as? UUID {
                            self.idArray.append(id)
                        }else{
                            self.idArray.append("your_default_value")//default value or nil
                        }
                        
                    }
                }
            } catch {
                print("error")
            }
            
            tableView.reloadData()
            
        }
    
  • 这是一个常见的错误:如果两个数组都填充了可选项,那么数据源的多个数组极易出错。

    声明自定义结构体

    struct Item {
        let name: String
        let id: UUID?
    }
    

    声明数据源

    var items = [Item]()
    

    填充数组( valueForKey 语法已过时)

    let fetchRequest = NSFetchRequest<ToName>(entityName: "ToName")
    fetchRequest.returnsObjectsAsFaults = false
    
    do {
        let results = try context.fetch(fetchRequest)
        for result in results {
            if let name = result.name {
                self.items.append(Item(name: name, id: result.id))
            }
        }
        tableView.reloadData()
    } catch {
        print(error)
    }
    

    numberOfRowsInSection

    return items.count
    

    cellForRowAt

    content.text = items[indexPath.row].name
    

    并且在 didSelectRowAt

    let item = items[indexPath.row]
    selectedName = item.name
    selectedId = item.id
    

    您甚至可以将 Item 实例传递给第二个视图控制器而不是两个 selected... 属性。


    但为什么没有

    var toNames = [ToName]()
    

    这可以避免任何 超出范围的 崩溃

  • 我花了几个小时调试这个问题,找到了一个令人满意的解决方案。它不需要导入顺序交换快速修复就可以工作。我决定发布答案,以防其他人遇到这个问题。

    将 TensorFlow 降级到 2.15.0 版本解决了该问题,允许脚本运行,而不管 pandas 和 tensorflow 的导入顺序如何。

    pip install tensorflow==2.15.0
    

    背景:冻结发生在 TensorFlow 的 execute.py 中的 quick_execute 函数中,并且仅在先导入 pandas 时才会发生,原因如下:

    def quick_execute(op_name, num_outputs, inputs, attrs, ctx, name=None):
        device_name = ctx.device_name
        try:
            ctx.ensure_initialized()
            tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name, inputs, attrs, num_outputs)
        except core._NotOkStatusException as e:
            if name is not None:
                e.message += " name: " + name
            raise core._status_to_exception(e) from None
        except TypeError as e:
            keras_symbolic_tensors = [x for x in inputs if _is_keras_symbolic_tensor(x)]
            if keras_symbolic_tensors:
                raise core._SymbolicException(
                    "Inputs to eager execution function cannot be Keras symbolic "
                    "tensors, but found {}".format(keras_symbolic_tensors))
            raise e
        return tensors
    

    冻结的函数调用是:

    tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name, inputs, attrs, num_outputs)
    

    我无法确定为什么 TensorFlow 中的这个函数会导致冻结,因为它不允许我从该点进一步进入,但降级到 TensorFlow 2.15.0 可以避免这个问题。

  • 您应该设置:

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
            return UITableView.automaticDimension
    }
    
    

    将约束设置为 ImageView -> 宽度和高度例如 150x150

    并将 ImageView 的“ Content Mode ”属性设置为“ Aspect Fill

    之后将约束设置为文本或标签,高度 >= 10,行 = 0,并将约束设置为时间标签

    所有图像和标签必须具有顶部和底部约束才能自动增加 tableviewcell 高度

    你可以检查这个链接可能会有帮助: https://github.com/MessageKit/MessageKit

  • 导入 pandas AFTER tensorflow 似乎可以解决问题:

    from tensorflow.keras import layers, models
    import pandas as pd
    

    来源: https://evoila.com/blog/debugging-tensorflow-pandas-import-issue-macos-sonoma-apple-m3-pro/

  • 我确实认为它与内存有关,尽管我已经想不出可以做什么了。所有代码片段在我的 Windows 机器上都能完美运行,我克隆了环境并匹配了每个包的所有版本。我无法在 Windows 上复制这一点。我将尝试实现回调并在明天详细检查。

  • 我找到了解决方案。无需修改 view.frame,只需修改 superview.frame 即可。显然,这对于更高型号的 iPad 和 iPhone 来说是必要的。

       // animate the gamescene to view of close the mainmenu.
        UIView.animate(withDuration: 0.5, animations: ({
            self.gameBackgroundView?.superview?.frame = CGRect(x:slideToXPosition,
                                                               y:0,
                                                               width: frameSize!.width,
                                                               height: frameSize!.height)
    
            
        })) { _ in
          
            completion?()
        }
    
  • emay 2月前 0 只看Ta
    引用 18

    我没想到将模型的构建分解成步骤会一路顺利……也许你有内存问题?顺便说一句,你还可以创建一个回调对象并将其添加到 fit' 回调中,并在任何 epoch/batch/train 开始/结束之前打印你想要的任何内容(你应该预料到你的终端会充满打印内容)

  • VGR 2月前 0 只看Ta
    引用 19

    @HangarRash,你说得对,你能帮帮我吗?如何用多行文本显示更大的图像?

  • 环境不是问题。我通过从终端而不是 VSCode 运行它进行了仔细检查。我手动激活了环境并运行了 test.py python 脚本。我做了你建议的额外测试,现在将它们编辑到主帖中。

返回
作者最近主题: