小编Wil*_*son的帖子

Apple Watch上的调试从不打印到控制台

我正在构建一个原生Apple Watch应用程序,并且在模拟器上它会很好地打印到控制台,但是当我在设备上运行时它永远不会这样做.这是预期的行为吗?

xcode ios ios-simulator watchkit watchos-2

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

自定义UICollectionViewCell上的标签插座在Swift中导致Optional.None崩溃

我有一个collectionViewController,我想显示一堆自定义的UICollectionViewCells,上面有一些标签.不幸的是,每当我尝试访问自定义UICollectionViewCell的标签时,它都会导致崩溃:

安慰

致命错误:无法打开Optional.None

窗口

Thread1:EXC_BAD_INSTRUCTION(代码= EXC_1386_INVOP,子代码= 0x0)

我正试图像这样访问标签:

cell.name.text = names[indexPath!.item]
Run Code Online (Sandbox Code Playgroud)

也许这来自我的插座标签是零?但是,寻找答案没有任何效果,因为我不确定添加的问题是什么?/!在我的代码中并没有真正帮助.

MyCustomUICollectionViewController

class ScrambledTextCollectionViewController: UICollectionViewController {

    var names: String[] = ["Anna", "Alex", "Brian", "Jack"]

    override func viewDidLoad() {
        super.viewDidLoad()

        // Register cell classes
        self.collectionView.registerClass(MyCustomCollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier)

    }

    override func numberOfSectionsInCollectionView(collectionView: UICollectionView?) -> Int {
        return 1
    }

    override func collectionView(collectionView: UICollectionView?, numberOfItemsInSection section: Int) -> Int {
        return names.count
    }

    override func collectionView(collectionView: UICollectionView?, cellForItemAtIndexPath indexPath: NSIndexPath?) -> UICollectionViewCell? {
        var cell = collectionView?.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as MyCustomCollectionViewCell

        cell.name.text …
Run Code Online (Sandbox Code Playgroud)

uicollectionview uicollectionviewcell swift ios8

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

在CloudKit中保存对象数组

我对如何最好地保存包含CloudKit中其他对象数组的对象感到困惑.

假设我有一个待办事项列表应用程序,它有不同的项目集合.我如何保存/获取整个项目集合?

我是否有一个Record类型的Collection,它有一个名为"Name"的String属性,然后是一个名为"Items"的引用列表属性?

我知道Record类型的Item需要有一个名为"Collection"的引用属性,因为CloudKit如何从子对象引用它的父对象.

我已设法使用以下代码保存没有任何Item实例的集合

func addCollection(collection: Collection!, completion: (error: NSError!) -> ()) {
    if collection == nil
        return
    }
    let collectionRecord = CKRecord(recordType: "Collection")
    CollectionRecord.setObject(collection.name, forKey: "Name")
    privateDB.saveRecord(collectionRecord) {
        record, error in
        dispatch_async(dispatch_get_main_queue()) {
           completion(error: error)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

另一个选项是在保存Collection时,循环遍历Item的所有实例并单独保存它们,它们的Reference Attribute to Collection在CloudKit端进行连接,但这似乎是太多的网络调用.

swift ios8 cloudkit ckreference

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

Autolayout破坏了UIView Animation

努力使我的应用程序在iPhone 5和较小的iPhone之前工作.很高兴要求iOS6并使用Autolayout因为它很好用.

但是,应用程序有4个按钮,可以定期交换位置,因此我为每个按钮分配一个与数组不同的位置,然后使用以下内容为动画设置动画:

[UIView animateWithDuration:0.5 animations:^{
    button1.center = [[locations objectAtIndex:0] CGPointValue];
    button2.center = [[locations objectAtIndex:1] CGPointValue];
    button3.center = [[locations objectAtIndex:2] CGPointValue];
    button4.center = [[locations objectAtIndex:3] CGPointValue];
}];
Run Code Online (Sandbox Code Playgroud)

这不适用于Autolayout.没有什么变化.我得到的最好的是它会动画到一个位置,然后立即回弹.

当我删除Autolayout但是所有的按钮都在较小的iPhone上被碾碎,并且由于我使用的是iPhone 5尺寸设置的点,它们最终会降低,将底部行放在屏幕上.我原来有来自Interface Builder的不同的CGPoint数字,但它们是"错误的",虽然我认为它们是"错误的",因为它们是Autolayout使用的数字.数组就这样你可以看到:

buttonLocations = [NSArray arrayWithObjects:
        [NSValue valueWithCGPoint:CGPointMake(57, 523)],
        [NSValue valueWithCGPoint:CGPointMake(109, 523)],
        [NSValue valueWithCGPoint:CGPointMake(57, 471)],
        [NSValue valueWithCGPoint:CGPointMake(109, 471)],
        nil];
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能解决这个问题?为每个尺寸的设备设置不同的点似乎不是很有效.

cgpoint uiviewanimation ios autolayout

6
推荐指数
2
解决办法
5073
查看次数

HKWorkoutSession并未将应用程序保留在Apple Watch前面

已经声明,运行HKWorkoutSession的应用程序将拥有超过其他watchOS 2应用程序的特权,因此当用户查看他们的Apple Watch时,它将转到显示运行锻炼而不是表面的视图.

目前,在我的设备和模拟器上,情况并非如此.如果我开始HKWorkoutSession然后离开5分钟,然后与Apple Watch或Watch Simulator进行交互,它会呈现表盘.

如果我然后打开我的应用程序,它似乎已被冻结,而不是终止(这是我想象的其他应用程序).当我需要在query.updateHandler中收到响应时,UI将更新.此外,如果我将其设置为每次我的query.updateHandler收到新的HKQuantitySample时都会提供触觉反馈,那么它将会这样做,因此应用必须以某种形式在后台运行.

有没有人注意到这种行为,我做错了什么,或者期待我不该做的事情?

以下是我开始HKWorkoutSession的方法:

    self.workoutSession = HKWorkoutSession(activityType: HKWorkoutActivityType.Other, locationType: HKWorkoutSessionLocationType.Indoor)

        self.healthStore.startWorkoutSession(self.workoutSession) {
            success, error in

            if error != nil {
                print("startWorkoutSession \(error)\n")
                self.printLabel.setText("startWorkoutSession \(error)")
                self.printLabel.setTextColor(UIColor.redColor())
            }
Run Code Online (Sandbox Code Playgroud)

healthkit apple-watch watchkit watchos-2

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

强制视图上的特定大小类

我有一个视图,需要iPad和iPhone版本之间的不同约束.

登录屏幕在iPhone上以及在iPad上的页面表中以全屏显示.由于尺寸的原因,UITextFields距离iPhone的右侧和左侧40像素,但我希望它们在iPad上为80像素.我将其设置为最终值大小类(w Regular,h Regular)的特定约束.

但是,因为此视图显示在页面表上,所以它不使用最终值大小类.理想情况下,我想"强制"视图使用大小类,而不是拥有一组iPhone/iPad约束和许多约束Outlets.

objective-c ios autolayout nslayoutconstraint size-classes

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

CloudKit订阅未在iOS10上保存

我正在关注"CloudKit最佳实践"WWDC关于添加订阅的讨论,这似乎在iOS10中有所改变.

下面的代码返回'Success!',但是我的'AllChanges'订阅从未出现在CloudKit仪表板上的订阅类型中.

我在Xcode 8 beta 6上.

    let subscription = CKDatabaseSubscription(subscriptionID:"AllChanges")
    let notificationInfo = CKNotificationInfo()
    notificationInfo.shouldSendContentAvailable = true
    subscription.notificationInfo = notificationInfo

    let operation = CKModifySubscriptionsOperation(subscriptionsToSave: [subscription], subscriptionIDsToDelete: [])
    operation.modifySubscriptionsCompletionBlock =  {
        (modifiedSubscriptions: [CKSubscription]?, deletedSubscriptionIDs: [String]?, error: Error?) -> Void in

        if error != nil {
            print(error!.localizedDescription)
        } else {
            print("Success!")
        }
    }
    operation.qualityOfService = .utility
    privateDatabase.add(operation)
Run Code Online (Sandbox Code Playgroud)

ios swift cloudkit cksubscription ios10

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

在两点之间移动UIButton的正确方法?

尝试制作一个小型点击游戏,你有一个正方形网格,需要按不同的顺序点击它们.偶尔这些方块会互相交换位置.

我想我需要将每个方块的位置放入一个数组中.然后,当需要移动时,从当前位置转到从阵列中随机选择的位置,然后删除阵列中的该位置,这样我就不会在同一个位置获得多个按钮.

不幸的是,我甚至无法移动UIButtons,更不用说在两个位置之间进行插值.

目前这将移动一个按钮:

-(IBAction)button:(id)sender
{
    button.center = CGPointMake(200, 200);
}
Run Code Online (Sandbox Code Playgroud)

但我不希望它像那样工作,我希望它能像这样工作,但它不起作用:

if (allButtonsPressed == YES)
{
    button.center = CGPointMake(200, 200);
}
Run Code Online (Sandbox Code Playgroud)

如果放置如下,它甚至不会移动:

-(void)viewDidLoad
{
    [super viewDidLoad];
    button.center = CGPointMake(200, 200);
}
Run Code Online (Sandbox Code Playgroud)

为清楚起见,按钮是通过Interface Builder添加的,所有这些情况在做其他事情时都有效,所以我猜UIButtons需要以特定的方式移动/动画?

xcode interpolation uibutton

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