小编Mar*_*Him的帖子

使用Xcode进行模拟时,PerformFetchWithCompletionHandler调用两次

在Xcode 7.0.1中,"模拟背景"获取命令导致performFetchWithCompletionHandler两次触发.

这是一个Xcode调试错误,还是在运行应用程序发布版本的设备上发生这种情况.

立即更新我们有Xcode 7.1.1,仍然performFetchWithCompletionHandler被调用两次.由于我不确定这是否也"在野外"发生,如果我的提取动作已经在运行,我将保持状态.

- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(nonnull void (^)(UIBackgroundFetchResult))completionHandler {
    if (self.performingFetch) {
        return completionHandler(UIBackgroundFetchResultNoData);
    }
    self.performingFetch = YES;
    ...
    self.performingFetch = NO;
}
Run Code Online (Sandbox Code Playgroud)

xcode objective-c ios swift background-fetch

46
推荐指数
1
解决办法
2127
查看次数

调整文本的字体大小以适合UIButton

我想确保按钮文本适合UIButton,而UIButton具有固定大小.

当然我可以访问UIButton的titleLabel.在标签中,我将设置autoshrink为最小字体比例,似乎对应于

self.myButton.titleLabel.adjustsFontSizeToFitWidth = YES;
Run Code Online (Sandbox Code Playgroud)

,但实际上表现不一样,因为它只使文本水平地适合边界而不是垂直,从而不会改变字体大小.

如何以编程方式实际调整标签的字体大小以使文本适合标签边界(如下图中的 目标 所示)?

adjustsFontSizeToFitWidth实际上并不调整字体大小以适应框架,只调整宽度

我已经试过了

self.myButton.titleLabel.numberOfLines = 0;
self.myButton.titleLabel.minimumScaleFactor = 0.5f;
Run Code Online (Sandbox Code Playgroud)

没有成功,总是像adjustsFontSizeToFitWidth上面的图片左侧那样结束.

编辑:解决方案还必须符合ios7

objective-c uibutton uilabel ios swift

33
推荐指数
4
解决办法
3万
查看次数

使用UIImage或远程URL进行UNNotificationAttachment

在我,Notification Service Extension我正在从URL下载图像,以显示UNNotificationAttachment在通知中.

所以我把这个图像作为UIImage,并没有看到需要在光盘上的我的app目录/组容器中写它只是为了设置通知.

有没有一个很好的方法创建UNNotificationAttachment一个UIImage? (应该适用于本地和远程通知)

uiimage ios swift unnotificationattachment

14
推荐指数
2
解决办法
1万
查看次数

命令太多了?Dyld消息:格式错误的mach-o:加载命令大小

一些iOS 9设备似乎崩溃了我从Xcode中的基本崩溃报告中收到的错误消息

dyld:malformed mach-o:load命令大小(16464)> 16384

不幸的是,这是我获得的所有信息.我甚至无法在本地调试或重现.任何人都可以向我暗示正确的方向吗?

它发生在更新我的Cocoapods后,所以我猜他们中的一个(或他们的依赖)行为不端.

在对我的mach-O二进制文件进行一些调查之后,我看到它sizeofcmds真的是16464.如果我理解正确,似乎有一个16384的加载命令大小限制,任何人都可以确认这个吗?

这是否意味着我应该删除dylibs,一切都应该没问题?

dyld ios ios9

11
推荐指数
2
解决办法
1247
查看次数

如何使用swift在一个视图控制器中更改状态栏颜色?

UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
Run Code Online (Sandbox Code Playgroud)

我使用这个在所有应用程序中将状态栏更改为亮.但现在我需要在一个View Controller中将其更改为黑色.我怎样才能做到这一点?

xcode ios swift

10
推荐指数
3
解决办法
9490
查看次数

NSArray.array/.new/@ []/alloc-init之间的区别

似乎有不同的实例化NSArrays的方法(NSDictionary和其他一些方法相同).

我知道:

  1. [NSArray array]
  2. [NSArray new]
  3. @[]
  4. [[NSArray alloc] init]

出于可读性的原因,我经常坚持[NSArray array],但所有这些之间有什么区别,他们都真的这样做吗?

objective-c nsarray ios

8
推荐指数
2
解决办法
1758
查看次数

XTubeManager在后台崩溃?

我在XTubeManager中遇到大量崩溃(似乎是CFNetwork内部).不幸的是,控制台日志不可用,只有调用堆栈(见下文).

问题:

  • 我可以想象我的应用程序在后台崩溃,因此没有写入控制台日志,你认为这是可能的吗?
  • 我是否必须以不同方式处理backgroundTask到期,例如取消所有我的NSURLRequests?(见下面的代码)

背景

我经常在后台(或通过后台推送)醒来并运行这样的后台任务:

NSString *myTaskName = @"some.random.task.name";
__block UIBackgroundTaskIdentifier taskID = [UIApplication.sharedApplication beginBackgroundTaskWithName:myTaskName expirationHandler:^{
    [UIApplication.sharedApplication endBackgroundTask:taskID];
    taskID = UIBackgroundTaskInvalid;
}];
dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(q,
    // doing some NSURLRequests stuff here
    [UIApplication.sharedApplication endBackgroundTask:taskID];
    taskID = UIBackgroundTaskInvalid;
});
Run Code Online (Sandbox Code Playgroud)

这通常被称为 applicationDidEnterBackground

调用堆栈

Thread : Crashed: com.apple.NSURLConnectionLoader
0  libobjc.A.dylib                0x183599b90 objc_msgSend + 16
1  CFNetwork                      0x184513300 XTubeManager::withTubeManager(CoreSchedulingSet const*, void (GlueTubeManager*) block_pointer) + 96
2  CFNetwork                      0x18451149c -[__NSURLSessionLocal _withConnectionCache_enqueueRequest:forProtocol:scheduling:options:] + 128
3  CFNetwork                      0x1845c3798 HTTPProtocol::asynchronouslyCreateAndOpenStream_WithMessage_AfterCookiesAndAuthenticatorHeaders(__CFHTTPMessage*) + 2000
4 …
Run Code Online (Sandbox Code Playgroud)

objective-c nsurlconnection nsurlrequest ios uibackgroundtask

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

如何在ViewController的viewDidAppear之前确定UIView大小

试着打破我现在有一段时间的问题

背景

让我们假设我尝试计算一个完全适合UIImageView的UIImage,它在故事板中配置了约束.

imageView的内容不应该填充/方面适合...但完全适合框架.因此我在viewController中有一个方法

- (UIImage *)calculatedImageForRect:(CGRect)imageRect
Run Code Online (Sandbox Code Playgroud)

问题

我想确保,一旦视图变得可见,imageView已经包含正确的图像,因此在简单的推送过渡期间也是如此.另外,我不想多次生成UIImage,因为它相对昂贵.

对于像iPhone6 plus这样具有不同屏幕分辨率的设备,这一点尤为有趣

显然,viewDidLoad框架没有正确设置.此时,帧被设置为故事板的预览 - 例如,用于表示IPhone5分辨率的设置.同样如此viewWillAppear.这里的帧例如是(10,10,300,100)< - 让我们把它称为错误帧

viewDidAppear帧上是正确的(10,10,394,100)= 正确的帧 < - 而不是320点宽度,iPhone6Plus有414点.然而,这里为时已晚,因为视图已经可见并且设置图像将导致闪烁(空图像>新生成的图像)​​.

我知道正确使用宽度的时间是viewDidLayoutSubviews,首先使用错误的帧至少调用一次,然后使用正确的帧调用一次.但正如我所说,我不想多次生成图像,所以这就是困境:

如何在可见之前确定右框架

当然,我可以[UIScreen mainScreen]通过使用UIImageView的尾随和前导约束来从分辨率计算出正确的帧,但它感觉很脏.

iphone objective-c uiviewcontroller uiview ios

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

NSCoder decodeDouble可选值

decodeDoubleNSCoder返回一个非可选值,但我想,以确定一个值是否是零它编码之前.

这是我的情景:

var optionalDouble: Double? = nil

func encode(with aCoder: NSCoder) {
    if let optionalDouble {
        aCoder.encode(optionalDouble, forKey: "myOptionalDouble")
    }
}

convenience required init?(coder aDecoder: NSCoder) {
    optionalDouble = aDecoder.decodeDouble(forKey: "myOptionalDouble") 
    // here optionalDouble is never nil anymore
}
Run Code Online (Sandbox Code Playgroud)

因此0,如果从未设置值,则解码double会返回,因此我似乎无法确定值是实际0还是nil在编码之前

有没有办法在编码之前检查双精度是否为零?

nscoding nscoder ios swift

2
推荐指数
1
解决办法
782
查看次数

NSPredicate:获得最高价值

我有以下内容:

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    let managedObjContext = appDelegate.managedObjectContext
    let fetchRequest = NSFetchRequest(entityName: "RAS")
    var error: NSError?
    let predicate1 = NSPredicate(format: "%K AND %K == false",  "rasScore", "rasStatus")

    fetchRequest.predicate = predicate1

    do {...
Run Code Online (Sandbox Code Playgroud)

这给了我所有符合NSPredicate参数的记录,但我只想要具有最高值的记录rasScore.我该怎么做呢?是否可以将其纳入NSPredicate格式?

nssortdescriptor nspredicate nsfetchrequest ios swift

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