小编Rob*_*Rob的帖子

如果URL和图像都存在,Facebook SLComposeViewController URL将显示在正文中

使用时SLComposeViewController,如果图像和URL都存在,我会注意到发布到Facebook时的好奇行为.具体来说,如果您同时拥有图像和URL,则URL会显示在Facebook帖子的正文中SLComposeViewController,initialText如果我执行以下操作,则会立即显示在该帖子的正文中:

SLComposeViewController *controller = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];

NSString *text = @"This is a test Facebook post with SLComposeViewController.";
NSURL *url = [NSURL URLWithString:@"http://http://stackoverflow.com/questions/12503287/tutorial-for-slcomposeviewcontroller-sharing"];
UIImage *image = ...;

[controller setInitialText:text];
[controller addURL:url];
[controller addImage:image];

[self presentViewController:controller animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

这显然是一个麻烦,因为如果URL很长,初始文本被推离视图的可见部分,SLComposeViewController我只看到URL的后一部分:

在此输入图像描述

如果我重复这个过程,这次不将图像添加到帖子中,URL的文本根本不会显示在正文中(即使它在网上正确显示).

在此输入图像描述

底线,仅当有图像 URL时,URL才显示在帖子的正文中.当我使用时,我看到了相同的模式FBNativeDialogs.

有没有办法阻止这种行为SLComposeViewController,以便我可以将图像和URL连接到Facebook帖子而不会将用户暴露给网站的冗长,丑陋的URL?显然,我可以使用任何非SLComposeViewController解决方案(例如,设计我自己的用户界面来撰写Facebook帖子,使用Facebook已弃用的Feed对话框等).只是想知道我是否忽略了一些明显的SLComposeViewController解决方案.

facebook ios ios6

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

这是什么意思:架构的未定义符号x86_64"_main"

我在Xcode上构建应用程序时遇到错误:

Undefined symbols for architecture x86_64:
  "_main", referenced from:
    implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
Run Code Online (Sandbox Code Playgroud)

我的代码都没有错误,错误是奇怪的错误,我做的任何事情都无法解决.我不认为代码与问题相关,因为它没有在错误中引用.

这是错误的屏幕截图.在此输入图像描述

macos xcode swift

10
推荐指数
1
解决办法
6070
查看次数

如何编写处理可选值的Dictionary扩展

我正在尝试实现Dictionary扩展,我想处理可选值.但无论我做什么,如果我在[String: String?]字典上使用我的方法,它都无法选择性地绑定值.如何编写优雅处理可选值的字典的扩展?


考虑以下扩展:

extension Dictionary {
    func someMethod() {
        for (key, value) in self {
            if let valueString = value as? String {
                println("  \(key) = \(valueString)")
            } else {
                println("  \(key) = \(value) cannot be cast to `String`")
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

请考虑以下代码:

let dictionary: [String: AnyObject?] = ["foo": "bar"]
dictionary.someMethod()
Run Code Online (Sandbox Code Playgroud)

它好奇地报道

foo = Optional(bar) cannot be cast to `String`
Run Code Online (Sandbox Code Playgroud)

我可以编写一个非扩展方法来处理带有可选值的字典参数,但是看不到如何将它作为扩展名来实现Dictionary.

swift swift-dictionary

10
推荐指数
1
解决办法
1059
查看次数

如何拍摄UIView部分的截图?

我希望用户在Swift中以编程方式按下按钮后继续我的应用程序并获取应用程序的屏幕截图.我知道这UIGraphicsGetImageFromCurrentImageContext()是截图,但我不想要整个屏幕的图片.我希望弹出一个矩形(有点像裁剪工具),用户可以拖动矩形并调整其大小,只截取屏幕的某个部分.我希望矩形覆盖WKWebView并裁剪网页视图的图片.

screenshot ios swift wkwebview

10
推荐指数
1
解决办法
6553
查看次数

目前设置UIView角落半径的"正确"方法是什么?

设置UIView角的半径可以通过以下方式完成:

  1. 设置layercornerRadius属性:

    view.layer.cornerRadius = 5;
    view.layer.masksToBounds = true;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 涂上面膜:

    func roundCorners(corners:UIRectCorner, radius: CGFloat) {
        let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
        let mask = CAShapeLayer()
        mask.path = path.cgPath
        self.layer.mask = mask
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 覆盖draw(_:):

    func draw(_ rect: CGRect) {
        // Size of rounded rectangle
        let rectWidth = rect.width
        let rectHeight = rect.height
    
        // Find center of actual frame to set rectangle in middle
        let xf: CGFloat = (self.frame.width …
    Run Code Online (Sandbox Code Playgroud)

uiview ios swift

10
推荐指数
5
解决办法
5878
查看次数

如果不这样做的话

我是swift的新手,我在下面的逻辑中闻到了一个糟糕的代码

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if let dest = segue.destination as? VC1,
        let index =  collectionView?.indexPathsForSelectedItems?.first{
        dest.selection = self.cellLabels[index.row]
    }
    if let dest2 = segue.destination as? VC2,
        let index2 =  collectionView?.indexPathsForSelectedItems?.first{
        dest2.selection = self.cellLabels[index2.row]
    }
    if let dest3 = segue.destination as? VC3,
        let index3 =  collectionView?.indexPathsForSelectedItems?.first{
        dest3.selection = self.cellLabels[index3.row]
    }

}
Run Code Online (Sandbox Code Playgroud)

基本上,我有多个视图控制器,我试图达到,这取决于哪个Cell被点击.

为什么我觉得这是坏代码是因为有很多代码重复.有没有更好的方法来构建它?

ios swift

10
推荐指数
1
解决办法
1358
查看次数

'dispatch_get_main_queue()' 的歧义使用

如何使用DispatchQueue该类为 iOS 替换以下 Swift 代码?这是旧的 Swift 3 代码,最新的 Xcode 不会转换为 Swift 5。

dispatch_async(dispatch_get_main_queue()) { () -> Void in
  // code
}
Run Code Online (Sandbox Code Playgroud)

它给了我一个错误,说

'dispatch_get_main_queue()' 的歧义使用

dispatch_get_main_queue()

以下答案似乎是正确答案,我想使用它,但有人可以告诉我这是正确的吗?迅捷版

它说使用以下代码:

DispatchQueue.global(qos: .background).async {

    // Background Thread

    DispatchQueue.main.async {
        // Run UI Updates
    }
}
Run Code Online (Sandbox Code Playgroud)

除了使用之外DispatchQueue,我还有什么其他选择可以解决这个错误?

ambiguous grand-central-dispatch ios swift dispatch-queue

10
推荐指数
1
解决办法
6250
查看次数

Actor 隔离 @Observable 类型

回到 WWDC 2021\xe2\x80\x99s Discover concurrency in SwiftUI,他们建议您将ObservableObject对象与主要参与者隔离。例如:

\n
struct ContentView: View {\n    @StateObject var viewModel = ViewModel()\n\n    var body: some View {\n        Text("\\(viewModel.count)")\n        .task {\n            try? await viewModel.start()\n        }\n    }\n}\n\n@MainActor \nclass ViewModel: ObservableObject {\n    var count = 0\n\n    func start() async throws {\n        while count < 10 {\n            count += 1\n            try await Task.sleep(for: .seconds(1))\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

但在 iOS 17\xe2\x80\x99s观察框架(如 WWDC 2023\xe2\x80\x99s Discover Observation in SwiftUI中介绍)中,似乎不再需要隔离到主要参与者来防止在后台线程。例如,以下内容不会出现有关从后台启动 UI 更新的警告:

\n
struct ContentView: View {\n …
Run Code Online (Sandbox Code Playgroud)

ios swift observableobject ios17 observation-framework

10
推荐指数
1
解决办法
1169
查看次数

CLGeocodeCompletionHandler只有一个地标条目

的文档

- (void)geocodeAddressString:(NSString *)addressString completionHandler:(CLGeocodeCompletionHandler)completionHandler;
Run Code Online (Sandbox Code Playgroud)

文件明确指出:

在前向地理编码请求的情况下,如果提供的信息产生多个可能的位置,则可以返回多个地标对象.

声明它返回一个地标数组.然而,即使我搜索我确定知道的物品有多个条目(好莱坞,华盛顿,丹麦,主要街道等)我总是只有一个条目.

有些人只是耸耸肩说使用谷歌API,但我担心请求限制.

是否有一些设置或黑客来解决这个问题,还是CLGeocoder简单地破坏了?

iphone geocoding objective-c clgeocoder

9
推荐指数
1
解决办法
387
查看次数

使用NSInputStream流式传输NSXMLParser

更新:

使用NSXMLParser类方法时initWithContentsOfURL,不是在下载XML提要时进行解析,而是尝试将整个XML文件加载到内存中,然后才启动解析过程.如果XML提要量很大(使用过多的RAM,本身效率低下,因为它不是与下载并行解析,而是仅在下载完成后才开始解析等),这是有问题的.

有没有人发现如何使用源将数据流传输到设备来解析NSXMLParser?是的,您可以使用LibXML2(如下所述),但似乎应该可以使用它NSXMLParser.但这是在逃避我.

原始问题:

我正在努力使用NSXMLParser从Web流中读取XML.如果您使用initWithContentsOfURL,虽然界面可能会导致人们推断它会从Web流式传输XML,但它似乎不会这样做,而是在尝试进行任何解析之前尝试先加载整个XML文件.对于适度大小的XML文件来说这很好,但是对于非常大的XML文件来说,这是有问题的.

我已经看到NSXMLParserinitWithStreamNSInputStream从网络流式传输的一些定制使用相关的讨论.例如,有一些答案建议使用类似下面的Cocoa Builder帖子中CFStreamCreateBoundPair引用的内容和Apple Stream Programming Guide中关于设置套接字流的讨论,但我还没有使用它.我甚至尝试写我自己的子类是使用(这是它本身,在流还不错),但我无法得到它与一起工作.NSInputStreamNSURLConnectionNSXMLParser

最后,我决定使用LibXML2而不是NSXMLParser,如Apple XMLPerformance示例中所示,但我想知道是否有人有幸从使用的网络源获取流媒体NSXMLParser.我见过很多"理论上你可以做X "之类的答案,这一切从CFStreamCreateBoundPair给抓住了HTTPBodyStreamNSURLRequest,但我还没有遇到与流的工作演示NSXMLParser.

Ray Wenderlich文章如何为您的iPhone项目选择最佳的XML解析器似乎证实它NSXMLParser不适合大型XML文件,但是所有帖子都有关于NSXMLParser基于可能的解决方案的流量来传输非常大的XML文件,我我很惊讶我还没有找到这方面的工作示范.有谁知道NSXMLParser从网络流出的功能实现?显然,我可以坚持使用LibXML2或者其他一些等效的XML解析器,但是流式传输的概念NSXMLParser似乎非常接近.

nsxmlparser nsinputstream ios

9
推荐指数
1
解决办法
2454
查看次数