小编Viv*_*ive的帖子

ARC,桥接演员和GHUnit

我正在关注http://gabriel.github.com/gh-unit/docs/appledoc_include/guide_testing.html上的教程.问题是我的项目使用ARC而GHUnit没有.我管理过以前的错误,但现在我应该做桥接演员,我从未使用过,而且我迷路了.

NSString *string1 = @"a string";
GHAssertNotNULL(string1, nil); //error here
Run Code Online (Sandbox Code Playgroud)

错误描述:将Objective-C指针类型'NSString*'隐式转换为C指针类型'const void*'需要桥接转换.

任何帮助欢迎:)

objective-c gh-unit automatic-ref-counting

7
推荐指数
1
解决办法
1605
查看次数

@ available可用的iOS版本 - 缺少属性

我已经实现了这样的课程:

class MapLayoutGuide: NSObject, UILayoutSupport {
    var insetLength: CGFloat = 0
    init(insetLength: CGFloat) {
        self.insetLength = insetLength
    }
    var length: CGFloat {
        return insetLength
    }
}
Run Code Online (Sandbox Code Playgroud)

一切都运行良好,但新的iOS版本引入了新的变化:Apple changelog.

所以现在我收到3个错误:

  • Protocol requires property 'topAnchor' with type 'NSLayoutYAxisAnchor',
  • Protocol requires property 'bottomAnchor' with type 'NSLayoutYAxisAnchor',
  • Protocol requires property 'heightAnchor' with type 'NSLayoutDimension'.

考虑UILayoutSupport实现我可以看到新的变量:

@available(iOS 9.0, *)
var topAnchor: NSLayoutYAxisAnchor { get }
@available(iOS 9.0, *)
var bottomAnchor: NSLayoutYAxisAnchor { get }
@available(iOS 9.0, *)
var …
Run Code Online (Sandbox Code Playgroud)

ios swift ios9

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

NSDictionaryM setObject:forKey:EXC_BAD_ACCESS崩溃

系统崩溃日志:

Crashed: com.apple.main-thread
EXC_BAD_ACCESS KERN_INVALID_ADDRESS at 0x12121212

libobjc.A.dylib - objc_msgSend - isEqual:
CoreFoundation  - -[__NSDictionaryM setObject:forKey:]
Run Code Online (Sandbox Code Playgroud)

码:

if (object) {
    [_objects setObject:object forKey:key];
}
Run Code Online (Sandbox Code Playgroud)

当_objects的init在代码中更早出现时:

- (id)init {
     self = [super init];
     if (self) {
         _objects = [[NSMutableDictionary alloc] init];
     }
     return self;
}
Run Code Online (Sandbox Code Playgroud)

对象可以是零值,这就是我检查它是否存在的原因:

AFHTTPRequestOperation *object = [[AFHTTPRequestOperation alloc] initWithRequest:request];
Run Code Online (Sandbox Code Playgroud)

我不确定究竟会导致什么.崩溃很少发生,我无法重现它,但有些用户得到它.我假设有一些东西被解除分配,这可能_objects是零吗?或整个控制器被解除分配?为什么我能isEqual在日志中看到?

这可以解决这个问题吗?

if (object && _objects) {
    [_objects setObject:object forKey:key];
}
Run Code Online (Sandbox Code Playgroud)

objective-c crash-reports ios

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

Google API客户端GTMHTTPUploadFetcher重复

我正在创建一个cocoapod.到.podspec我添加了这一行:

cs.dependency 'Google-API-Client', '~> 1.0'
Run Code Online (Sandbox Code Playgroud)

从那时起,我无法将我的框架推向spec repo.中

pod repo push company-private MyFramework.podspec --allow-warnings --verbose
Run Code Online (Sandbox Code Playgroud)

我可以看到以下问题:

ERROR | [MyFramework/Core]  Google-API-Client/Source/Objects/GTLService.m:86:1: error: duplicate interface definition for class 'GTMHTTPUploadFetcher'
Run Code Online (Sandbox Code Playgroud)

我不知道如何解决它.尝试:

sudo rm -fr ~/Library/Caches/CocoaPods/
sudo rm -fr ~/.cocoapods/repos/master/
sudo rm -fr Pods/
Run Code Online (Sandbox Code Playgroud)

但这没有帮助.这似乎是Google-API-Client的错误,但他们的响应时间是如此之大(等待上一张票的大约6个月,仍未解决),我等不了多久.任何人都知道如何跳过这个问题?在我的机器上本地构建确实有效.

objective-c ios google-api-client cocoapods

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

Cocoapods 指向错误的版本

我在项目的一个版本中遇到了一些问题。我找到了这个答案,有人建议从机器中删除所有与 cocoapods 连接的东西并重新安装它。我确实按照以下步骤操作:

$ 'pod --version'
0.36.1

$ gem list --local | grep cocoapods
cocoapods (0.39.0.rc.1, 0.38.2, 0.38.1, 0.37.2)
cocoapods-core (0.39.0.rc.1, 0.38.2, 0.38.1, 0.37.2)
cocoapods-downloader (0.9.3, 0.9.1)
cocoapods-plugins (0.4.2)
cocoapods-search (0.1.0)
cocoapods-stats (0.6.2, 0.5.3)
cocoapods-trunk (0.6.4, 0.6.1)
cocoapods-try (0.5.1, 0.4.5)

$ gem uninstall cocoapods // and all others from the list above
Run Code Online (Sandbox Code Playgroud)

问题是,当我再次 grep 所有 cocoapods 时,列表等于上一个,没有任何消失。

$ sudo gem uninstall cocoapods
Select gem to uninstall:
 1. cocoapods-0.37.2
 2. cocoapods-0.38.1
 3. cocoapods-0.38.2
 4. cocoapods-0.39.0.rc.1
 5. All versions
> …
Run Code Online (Sandbox Code Playgroud)

ruby gem cocoapods

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

查找 Carthage 安装的所有依赖项的版本

如何知道我通过 Carthage 安装了哪些版本的依赖项?

Cartfile.resolved 仅通知我的项目的依赖项,但不通知我的项目的依赖项的依赖项..?

xcode dependency-management ios carthage

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

NSURLSessionDownloadTask 移动临时文件

我正在尝试访问我之前下载的文件NSURLSession。看来我无法读取文件的位置,即使我在委托方法结束之前执行此操作(因为文件是临时的)。

尽管如此,当我尝试访问从错误 257nil返回的位置下的数据时,我还是遇到了错误。NSURLSession delegate

代码如下:

- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location {
    NSError *movingError = nil;
    NSData *fileData = [NSData dataWithContentsOfFile:location.path options:0 error:&movingError]; // is nil
    NSLog(@"%@", movingError); // is error 257
}
Run Code Online (Sandbox Code Playgroud)

这段代码有什么问题..?我看到类似的问题NSURLSessionDownloadTask - downloads but attempts to erroriPhone - 将文件从资源复制到文档给出错误,但这些完全不适用于我的情况。

- 编辑 -

我创建了一个新项目并粘贴了完全相同的代码。它有效...所以:

1)在我的项目中,我收到错误 257,可能项目的某些配置无效,或者我在应用程序的其他地方使用 backgroundTasks 的事实把事情弄乱了

2)如果我将此下载的源文件放入 Carthage 链接的外部框架,则会发生与 1 相同的情况

3)在我创建的演示项目(复制粘贴1和2中使用的文件)中,一切正常。

如果有人知道是什么导致了它不起作用——那就太棒了。

permissions objective-c nsfilemanager ios nsurlsession

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

测量 - 获取完整的单位名称

我不知道如何使用测量来获取单位的全名。例如“公里”而不是“km”。

let measurement = Measurement(value: 50, unit: UnitLength.meters)
let convertedMeasurement = measurement.converted(to: UnitLength.kilometers)

let value = convertedMeasurement.value // 0.05
let unitSymbol = convertedMeasurement.unit.symbol // km
let unit = convertedMeasurement.unit.? // I expect the output to be "kilometers"
Run Code Online (Sandbox Code Playgroud)

measurement swift

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

导入可选框架

我正在尝试导入一个至少是 iOS 10 的框架(carthage)。我的项目最低版本是 iOS 9,我想保留它。我已经执行了以下步骤:

  • 将框架设置为可选,
  • 所有导入它的类都@available(iOS 11.0, *)高于该类(由于不同的原因,我希望它们高于 iOS 11 而不是 10),
  • 添加other linker flagweak_framework FrameworkName
  • Module file's minimum deployment target is ios10.0编译器仍然对next 语句不满意import FrameworkName

我还需要做什么才能使我的 iOS 9 项目与此类 iOS 10 框架兼容?我已经看过这个 SOF 问题本教程- 看来我已经做了它工作所需的一切。

xcode frameworks swift

5
推荐指数
0
解决办法
737
查看次数

如何使用ObservableObject更新UIViewRepresentable

我正在尝试学习与SwiftUI结合,并且正在努力如何使用ObservableObject(以前BindableObject)从UIKit更新视图。问题是,很明显,updateUIView一旦@Published对象发送更改通知,方法就不会触发。

class DataSource: ObservableObject {
    @Published var locationCoordinates = [CLLocationCoordinate2D]()
    var value: Int = 0

    init() {
        Timer.scheduledTimer(withTimeInterval: 3, repeats: true) { timer in
            self.value += 1
            self.locationCoordinates.append(CLLocationCoordinate2D(latitude: 52, longitude: 16+0.1*Double(self.value)))
        }
    }
}

struct MyView: UIViewRepresentable {
    @ObservedObject var dataSource = DataSource()

    func makeUIView(context: Context) -> MKMapView {
        MKMapView(frame: .zero)
    }

    func updateUIView(_ view: MKMapView, context: Context) {
        let newestCoordinate = dataSource.locationCoordinates.last ?? CLLocationCoordinate2D(latitude: 52, longitude: 16)
        let annotation = MKPointAnnotation() …
Run Code Online (Sandbox Code Playgroud)

uikit mapkit swift swiftui combine

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