小编Emr*_*der的帖子

滚动UITableView时,仪器显示"_NSContiguousstring"内存泄漏

我有一个UItableView,由10个元素组成.我打开了仪器以捕获内存泄漏,当我滚动tableView时,它开始泄漏内存.在仪器中我试图找到哪个导致泄漏但无法弄清楚,它说"_NScontiguousstring"表示整个泄漏.

我找到了Objective-C的一些解决方案,他们在"CellForRowAt"函数中检查了单元格是否为nil.我不认为它对Swift有用,但我试过并且按预期它不起作用.

内存泄漏UITableView

我的问题是什么会导致这种内存泄漏?

我测试的设备;

iPhone X on 11.3.1

iPhone 6 11.2.5控制器类;

class TableViewController: UITableViewController {
let teamModel = TeamModel(uid: "adsada", name: "First Team ", idea: "idea 1", slogan: "Slogan 1", university: "dasda", image: "info", isActive: true)
let teamModel2 = TeamModel(uid: "adsada", name: "Team 2", idea: "idea 2", slogan: "adasd", university: "dasda", image: "info", isActive: true)
let teamModel3 = TeamModel(uid: "adsada", name: "Team 3", idea: "idea 3", slogan: "adasd", university: "dasda", image: "info", isActive: true)
let teamModel4 = TeamModel(uid: "adsada", …
Run Code Online (Sandbox Code Playgroud)

memory-leaks uitableview ios swift

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

带有两个标签的水平 UIStackView(一个多行标签,一个单行)

我有一个水平的UIStackView,里面有两个UILabel。第一个 UILabel 是多行(两行),另一个只有一行。它们都有默认的内容压缩和抵抗优先级。我的问题是,即使标签之间存在差距,第一个文本中的“最佳”词也会出现在第二行。我注意到第一个标签没有超过总宽度的一半。

我想要的是第二个标签应该始终显示自己,第一个标签应该自己调整剩余空间的大小。如果它不能适合一行它应该是两行。但是,如果第二个标签太短而第一个标签很长但它们都可以容纳,则第一个标签应超过宽度的一半。

PS我在这个场景中需要使用UIStackView,因为还有其他情况。我知道在 UIView 中放置两个标签可能会解决问题。

UIStackView:
   - Distribution: Horizontal
   - Alignment: Center
   - Spacing: 0
   UILabel:
     - Number of line: 2
     - Line break: Word wrap
   UILabel:
     - Number of line: 1
Run Code Online (Sandbox Code Playgroud)

截屏

查看层次结构:

在此处输入图片说明

预期结果:

在此处输入图片说明

或者

在此处输入图片说明

编辑:我计算第二个标签的宽度并给出宽度约束。我认为它解决了我的问题,我会测试一下。

        //Give specific width to second label to make first one calculate right number of lines.
    if let font = UIFont(name: "Metropolis-ExtraBold", size: 15) {
        let fontAttributes = [NSAttributedString.Key.font: font]
        let size = (secondLabelText …
Run Code Online (Sandbox Code Playgroud)

uilabel ios swift uistackview

8
推荐指数
1
解决办法
2835
查看次数

仅获取 cloudkit 中的特定字段?

我只想获取 CloudKit 音乐记录中的 Song_Name 字段。我正在尝试下面的代码,但它仍然获取音乐记录中的所有字段。我想我需要使用 publicDB.add(operation) 方法编译操作,但它不允许我像现在使用 publicDB.perform(query, in....) 那样声明“results”

 let predicate = NSPredicate(value: true)
    let query = CKQuery(recordType: "Musics", predicate: predicate)
    let operation = CKQueryOperation(query: query)
    operation.desiredKeys = ["Song_Name"]

    publicDB.perform(query, inZoneWith: nil) { [unowned self] results, error in

        guard error == nil else {
            DispatchQueue.main.async {
                self.delegate?.errorUpdating(error! as NSError)
                print("Cloud Query Error - Refresh: \(error)")
            }
            return
        }
        self.items_music.removeAll(keepingCapacity: true)
        for record in results! {
            let music = Musics(record: record, database: self.publicDB)
            self.items_music.append(music)
        }
        DispatchQueue.main.async {
            self.delegate?.modelUpdated()
        }
    } …
Run Code Online (Sandbox Code Playgroud)

field ios swift cloudkit

6
推荐指数
1
解决办法
1174
查看次数

在 UIStackView() 中使一个视图比其他视图大

我有一个由 5 个元素组成的 UIStackView。我希望居中的比其他的大(如下图所示)。

我如何创建 UIStackView()

stackView.axis  = UILayoutConstraintAxis.horizontal
stackView.distribution = UIStackViewDistribution.fillEqually
stackView.alignment = UIStackViewAlignment.bottom
stackView.spacing = 0.0
stackView.addArrangedSubview(supportedServicesView)
stackView.addArrangedSubview(incidentView)
stackView.addArrangedSubview(contactUsView)
stackView.addArrangedSubview(moreView)
stackView.addArrangedSubview(moreView2)
stackView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(stackView)

stackView.anchor(nil, left: self.view.leftAnchor, bottom: self.view.bottomAnchor, right: self.view.rightAnchor, topConstant: 0, leftConstant: 0, bottomConstant: 90, rightConstant: 0, widthConstant: 0, heightConstant: 0)
Run Code Online (Sandbox Code Playgroud)

我如何创建我的自定义 UIViews 子视图位置;

override func updateConstraints() {
   logoImage.anchor(self.topAnchor, left: self.leftAnchor, bottom: nil, right: self.rightAnchor, topConstant: 0, leftConstant: 0, bottomConstant: 0, rightConstant: 0, widthConstant: 0, heightConstant: 0)
   label.anchor(self.logoImage.bottomAnchor, left: self.leftAnchor, bottom: nil, right: self.rightAnchor, topConstant: …
Run Code Online (Sandbox Code Playgroud)

ios swift uistackview

6
推荐指数
1
解决办法
4244
查看次数

如何在终端上从 xcarchive 导出 dsym 文件

我正在 Jenkins 上获取存档和 IPA。我想在获得构建后将 dsym 上传到 Fabric。如您所知,xcodebuild在 xcarchive/dSYMs 文件夹中生成 dsym。

我如何获取存档:

/usr/bin/xcodebuild -quiet -workspace My_Project.xcworkspace -scheme My_Project_Test -sdk iphoneos -configuration Release archive -archivePath CONFIGURATION_BUILD_DIR=${WORKSPACE}/build/My_Project_Test.xcarchive
Run Code Online (Sandbox Code Playgroud)

我如何获得 IPA:

/usr/bin/xcodebuild -exportArchive -archivePath CONFIGURATION_BUILD_DIR=${WORKSPACE}/build/My_Project_Test.xcarchive -exportOptionsPlist My_Project/Resources/Test/Test_ExportOptions.plist -exportPath CONFIGURATION_BUILD_DIR=${WORKSPACE}/build
Run Code Online (Sandbox Code Playgroud)

获取 dsym 的示例代码(目前不起作用):

ditto -c -k --keepParent -rsrc "${WORKSPACE}/build/My_Project_Test.app.dSYM" ${WORKSPACE}/build/My_project_Test-${PRODUCT_VERSION}-${PRODUCT_VERSION}-dSYM.zip
Run Code Online (Sandbox Code Playgroud)

上传代码:

$WORKSPACE/Pods/Fabric/upload-symbols -a xxxxxxxxxxxx -p ios -- build/My_Project_Test.app.dSYM
Run Code Online (Sandbox Code Playgroud)

我的问题是如何使用同上代码或一些相同的代码从 xcarchive 导出 dsym 文件。

terminal ditto ios jenkins swift

6
推荐指数
1
解决办法
3321
查看次数

如何在 Swift 中使用 Codable 解码具有不同对象的 JSON 数组?

我有一个 JSON,它由一个顶级对象组成,然后是一个由不同 JSON 对象组成的数组。我想用最少的结构和没有可选变量来解码这个 json。如果我可以实现,我还想设计一个结构,通过只编写其相关结构来处理所有数组对象。

我会尽量简化这个例子

JSON 图像

正如您在图像中看到的,“Id”、“Token”、“ServicePublicKey”都是不同的 JSON 对象。我的整个后端都以这种 JSON 架构返回。我想要实现的是一个结构作为包装器和结构(Id、ServicePublicKey、Token 等)。最后,当有来自 JSON 的新类型时,我只需要编写相关的结构并在包装器中添加一些代码。

我的问题是:如何在没有任何可选变量的情况下解析这个 JSON?

我如何尝试解析它:

struct Initialization: Decodable {
var error: BunqError? //TODO: Change this type to a right one
var id: Int?
var publicKey: String?
var token: Token?

enum CodingKeys: String, CodingKey {
    case error = "Error"
    case data = "Response"
    case Id = "Id"
    case id = "id"
    case ServerPublicKey = "ServerPublicKey"
    case Token = "Token"
}

init(from decoder: Decoder) throws {
    let …
Run Code Online (Sandbox Code Playgroud)

json ios swift codable

6
推荐指数
1
解决办法
3794
查看次数

WkWebView Evaluatejavascript返回不支持的类型错误

我正在向javascript函数发送值并获得结果。但是,在以下代码中运行时,出现“错误域= WKErrorDomain代码= 5“ JavaScript执行返回了不支持的类型的结果” UserInfo = {NSLocalizedDescription = JavaScript执行返回了不支持的类型的结果}”错误;

webView?.evaluateJavaScript("getURL()") { (result, error) in
            if let error = error
            {
                print("\(error)");
                return
            }
            if let song = result as? String
            {
                print("\(song)");
            }
        }
Run Code Online (Sandbox Code Playgroud)

和javascript代码如下;

    function getURL(){
  CloudKit.configure({
                         containers: [{
                                      // To use your own container, replace containerIdentifier and apiToken
                                      containerIdentifier: 'iCloud.com.hello.myapp',
                                      apiToken: 'myApiKey',
                                      environment: 'development'
                                      }]
                         });
                         console.log("cloudkitloaded");

                         var self = this;
                         console.log("get default container");
                         var container = CloudKit.getDefaultContainer();

                         console.log("set publicDB");
                         var publicDB = container.publicCloudDatabase;
                         self.items = ko.observableArray();

                         // …
Run Code Online (Sandbox Code Playgroud)

javascript stringbyevaluatingjavascr ios swift wkwebview

5
推荐指数
3
解决办法
3781
查看次数

在仪器中进行性能分析时出现SIGSEGV(内存不良访问)错误

我正试图通过仪器工具中的Leak Profiler来捕获内存泄漏并保留周期.但是,每当我单击Instruments中的记录按钮时,应用程序看起来就像启动然后崩溃一样.如果我从Xcode打开应用程序并将其转移到Instruments,我点击任何一个后应用程序崩溃UIButton.如果我从模拟器打开应用程序,我可以获得第二个屏幕,但随后它也会崩溃.此外,App不会在内存图中显示任何泄漏,也不会在正常使用时崩溃.

这是崩溃日志;

Exception Type: EXC_BAD_ACCESS (SIGSEGV) Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000000000018 VM Region Info: 0x18 is not in any region. Bytes before following region: 4377985000 REGION TYPE START - END [ VSIZE] PRT/MAX SHRMOD REGION DETAIL UNUSED SPACE AT START --->
__TEXT 0000000104f2c000-0000000104fbc000 [ 576K] r-x/r-x SM=COW ...ti App Test]

Termination Signal: Segmentation fault: 11 Termination Reason: Namespace SIGNAL, Code 0xb Terminating Process: exc handler [0] Triggered by Thread: 0

Filtered syslog: None found

Thread 0 name: …

crash instruments ios swift

5
推荐指数
1
解决办法
464
查看次数

在UIPanGestureRecognizer更改状态下更改UIView的alpha状态

我有一个卡片视图,看起来像下面的gif。我想UIView)在用户刷卡时淡出第一张卡并淡入第二张卡。UIView可以左右互换。我仅在以下帖子中找到有关此问题的信息,但不能帮助我。

在平移手势或拖动上更改视图Alpha

/// This method handles the swiping gesture on each card.
@objc func handleCardPan(sender: UIPanGestureRecognizer) {

    // if we're in the process of hiding a card, don't let the user interace with the cards yet
    if cardIsHiding { return }
    // change this to your discretion - it represents how far the user must pan up or down to change the option
    // distance user must pan right or left to trigger an option
    let …
Run Code Online (Sandbox Code Playgroud)

ios uipangesturerecognizer swift

5
推荐指数
1
解决办法
441
查看次数

UITableView 插入行后滚动到顶部

我有一个可扩展的UITableView. 当部分被点击时,它们会随着动画(滚动)展开或折叠。我的问题是在展开或折叠标题时有一个奇怪的动画。UITableView滚动到顶部,然后转到点击的单元格。此外,当没有扩展单元格时,有时,它不会滚动到顶部,并且顶部标题和顶部视图之间有很大的空间UITableView

我的问题是我需要滚动到扩展部分并摆脱滚动到顶部的错误。

我尝试了以下解决方案,但对我不起作用: insertRows 后防止表视图滚动到顶部

它看起来也与下面的问题相同,但无法弄清楚如何实现它。 为什么我的 UITableView 在插入或删除行时“跳跃”?

我如何切换选择:

func toggleSection(header: DistrictTableViewHeader, section: Int) {
    print("Trying to expand and close section...")
    // Close the section first by deleting the rows
    var indexPaths = [IndexPath]()
    for row in self.cities[section].districts.indices {
        print(0, row)
        let indexPath = IndexPath(row: row, section: section)
        indexPaths.append(indexPath)
    }

    let isExpanded = self.cities[section].isExpanded
    if(isExpanded){
        AnalyticsManager.instance.logPageEvent(screenName: analyticsName!, category: "Button", action: Actions.interaction, label: "\(self.cities[section].name) Collapse Click")
    }else{
        AnalyticsManager.instance.logPageEvent(screenName: analyticsName!, category: "Button", action: Actions.interaction, …
Run Code Online (Sandbox Code Playgroud)

uitableview ios swift

5
推荐指数
1
解决办法
1636
查看次数