【问题标题】:Sharing data with a name in UIActivityViewController在 UIActivityViewController 中使用名称共享数据
【发布时间】:2018-03-20 12:59:03
【问题描述】:

我在我的应用程序中添加了共享功能来共享名称、价格、数量和描述等数据。这就是我实现它的方式...

let prodObj = newProdDetails[indexPath.row]
let name = prodObj.name
let price = prodObj.mrp
let qty = prodObj.quantity
let description = prodObj.descriptions

let activityViewController:UIActivityViewController = UIActivityViewController(activityItems:  [name, price, qty, description], applicationActivities: nil)
self.present(activityViewController, animated: true, completion: nil)

当我在 whatsapp 中这样分享时,接收者得到的只是 Box,6,500(如果名称为 box,数量为 6,价格为 500)。

但是当我发送时,我希望接收方得到类似的东西

Name: Box

Quantity: 6

Price: 500

而不仅仅是 Box,6,500

我怎样才能做到这一点...?

【问题讨论】:

    标签: ios swift uiactivityviewcontroller


    【解决方案1】:

    为这样的活动项目发送字符串"Name: \(name)"

    let prodObj = newProdDetails[indexPath.row]
    if let name = prodObj.name,
        let price = prodObj.mrp,
        let qty = prodObj.quantity,
        let description = prodObj.descriptions  {
    
        let activityViewController:UIActivityViewController = UIActivityViewController(activityItems:  ["Name: \(name)", "Price: \(price)", "Quantity: \(qty)", "Description: \(description)"], applicationActivities: nil)
        self.present(activityViewController, animated: true, completion: nil)
    }
    

    【讨论】:

    • 这确实有效@Emre Özdil,但接收器以这种格式获取数据:价格:可选(“580”),而它应该只是价格:580
    • @D.M 您可以通过if letguard let 检查值以进行可选控制
    • 使用 if let 会出现此错误..Initializer for conditional binding must have Optional type, not 'NewProduct'
    • 名称、价格、数量和描述是 prodObj 的值,因此;我们需要 2 个守卫控制
    • 它对@Emre Özdil 有效,最初的答案只是必须像这样解开......["Name: \(name!)",...
    【解决方案2】:

    只需运行代码:

        let name = "javed"
        let price = 700
        let qty = 77
    
        let finalString:String = "Name:" + name + "\n" + "Quantity:" + String(qty) + "\n" + "Price:" + String(price)
        print(finalString)
    

    结果:

    或者你已经有了字符串值:

    【讨论】:

    • 仍然不起作用@Mr.Javed Multani。它显示相同的错误
    • 好的,所以检查你的对象值。现在只需给出静态值并进行测试。
    • 谢谢你,@D.M
    【解决方案3】:

    你可以这样尝试

    let prodObj = newProdDetails[indexPath.row]
    let name = prodObj.name
    let price = prodObj.mrp
    let qty = prodObj.quantity
    let description = prodObj.descriptions
    
    let finalString:String = "Name:" + name + "\n" + "Quantity:" + qty + "\n" + "Price:" + price 
    
    let activityViewController:UIActivityViewController = UIActivityViewController(activityItems:  [finalString], applicationActivities: nil)
    

    结果:

    Name: Box
    
    Quantity: 6
    
    Price: 500
    

    测试 100% 工作

    【讨论】:

    • 这绝对有效,让我知道结果是什么?
    • 它在 let finalString:String … as Expression was too complex to be solved in reasonable time; consider breaking up the expression into distinct sub-expressions 时出错
    • 如果要字符串拼接"Value: \(value)""Value: " + value
    • 嘿,解决办法
    【解决方案4】:

    你可以这样做。

    let share : String = "Name: \(name) \nQuantity: \(qty) \nPrice: \(price)" 
    
    let activityViewController:UIActivityViewController = UIActivityViewController(activityItems:  [share], applicationActivities: nil)
    

    【讨论】:

      【解决方案5】:

      发生的事情不是传递诸如名称价格数量之类的单个属性,而是使用(键值对,以便您知道哪个值与哪个键关联)创建一个字符串或字典数组,然后传递整个数组,您还可以检查一个值是否存在,然后仅将其添加到最终数组中(根据您的要求)

      let prodObj = newProdDetails[indexPath.row]
      
      let name = prodObj.name ?? "" //this means if name is nil it will set empty string 
      let price = prodObj.mrp ?? 0 
      let qty = prodObj.quantity ?? 0
      let description = prodObj.descriptions ?? ""
      
      //create array from the data you get you can create a string like below
      let finalArrayString =  ["Name: \(name)", "Price: \(price)", "Quantity: \(qty)", "Description: \(description)"]
      
      //or create an array of the dictionary for using it late
      
      let activityViewController:UIActivityViewController = UIActivityViewController(activityItems: finalArrayString , applicationActivities: nil)
      

      另外,在使用之前检查你的 prodObj 是否为 nil,如果它为 nil,你可以返回(根据你的要求)

      也明白为什么在从 StackOverflow 复制粘贴代码之前,因为它会节省你以后的时间,

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多