小编bad*_*esh的帖子

使用NSCoding将自定义Swift类保存到UserDefaults

我目前正在尝试将自定义Swift类保存到NSUserDefaults.这是我的Playground的代码:

import Foundation

class Blog : NSObject, NSCoding {

    var blogName: String?

    override init() {}

    required init(coder aDecoder: NSCoder) {
        if let blogName = aDecoder.decodeObjectForKey("blogName") as? String {
            self.blogName = blogName
        }
    }

    func encodeWithCoder(aCoder: NSCoder) {
        if let blogName = self.blogName {
            aCoder.encodeObject(blogName, forKey: "blogName")
        }
    }

}

var blog = Blog()
blog.blogName = "My Blog"

let ud = NSUserDefaults.standardUserDefaults()    
ud.setObject(blog, forKey: "blog")
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,我收到以下错误

执行被中断,原因:信号SIGABRT.

在最后一行(ud.setObject...)

在带有消息的应用程序中,相同的代码也会崩溃

"属性列表格式无效:200(属性列表不能包含'CFType'类型的对象)"

有人可以帮忙吗?我在Maverick上使用Xcode 6.0.1.谢谢.

nsuserdefaults nscoding sigabrt swift

76
推荐指数
6
解决办法
5万
查看次数

Xcode 9没有任何模拟器设备

我刚下载了xcode 9 beta,但其中没有模拟器.尝试添加新的模拟器,但创建按钮不起作用.请帮忙

通过"其中没有模拟器"我的意思是有用模拟器构建的选项.

看到 在此输入图像描述.

此外,创建按钮不起作用 在此输入图像描述

xcode ios xcode9-beta xcode9

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

iOS 10-AVPlayer在播放视频时显示黑屏

在这里,我有一种将视频层添加到我在IB中设置的UIView的方法:

 -(void)loadPlayer{
        self.asset = [AVAsset assetWithURL:url];

        AVPlayerItem *item = [AVPlayerItem playerItemWithAsset:self.asset];

        self.player = [AVPlayer playerWithPlayerItem:item];
        self.playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];
        self.playerLayer.contentsGravity = AVLayerVideoGravityResizeAspect;
        self.player.actionAtItemEnd = AVPlayerActionAtItemEndNone;

        item.videoComposition = [AVVideoComposition videoCompositionWithPropertiesOfAsset:self.asset];

        [self.player pause];
        [self.player addObserver:self forKeyPath:@"status" options:0 context:nil];

        dispatch_async(dispatch_get_main_queue(), ^{
            [self.videoLayer.layer addSublayer:self.playerLayer];
        });
}
Run Code Online (Sandbox Code Playgroud)

在View Controller的viewDidAppear中调用上述方法,因此,每次加载当前View Controller时,视频都应开始播放。

在这里,我检查玩家状态并准备好资产:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
                        change:(NSDictionary *)change context:(void *)context {
    if (object == self.player && [keyPath isEqualToString:@"status"]) {
        if (self.player.status == AVPlayerStatusReadyToPlay) {
            [self.player play];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题在于视图确实出现了,视频开始播放,但仅播放音频,而不播放视频。我得到的只是黑屏代替了视频。音频可以正常播放,但是由于未知原因,它似乎无法渲染视频帧。

这仅在iOS 10设备上发生,在iOS 9设备上运行时使用相同的代码,就像是超级按钮。该视频按预期显示。

就AVPlayer而言,iOS 10的AVFoundation框架是否有任何更改?还是我在这里缺少任何内容,因为iOS 9表现不错。 …

video objective-c avfoundation ios avplayeritem

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

在 Swift 的 UIKit Dynamics 中,如何定义圆形边界以包含 UIView?

我已经研究了很多,但我在任何地方都能找到的唯一例子是为了定义 UIView 的边界,以便它们在对象的外部相互碰撞/反弹。

示例:一个球击中另一个球,然后它们相互弹开。

但是我想要做的是创建一个圆形视图来包含其他 UIViews,这样包含的边界是一个圆形,而不是默认的正方形。有没有办法实现这一目标?

animation collision-detection uikit-dynamics swift

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

当应用程序在前台时,IOS Play Sound接收推送通知

如何在应用程序处于前台状态时接收推送通知时播放声音.

我的代码:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    if (application.applicationState == UIApplicationStateActive)
    {
        //create an audio player and play the sound

        NSString *path = [[NSBundle mainBundle] pathForResource:@"whistle" ofType:@"caf"];
        NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: path];
        AVAudioPlayer *theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:NULL];
        theAudio.volume = 1.0;
        [theAudio prepareToPlay];    
        [theAudio play];
    }

    NSLog(@"didReceiveRemoteNotification %@",userInfo);    
}
Run Code Online (Sandbox Code Playgroud)

push-notification apple-push-notifications ios

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

如何在Swift 4上将多个UITextField放入一个字符串?

我有6个UITextfields,我想将它们全部放入一个字符串,这样我就可以得到输入到UItextField中的内容.

示例:在UItextfield1中,我输入数字"3",然后在UItextfield2中输入数字"5",依此类推.我想将它放入一个字符串,因此它显示为"35"....

以下是我的代码.任何帮助都会很棒!

class EnterUsersCode: UIViewController {

    var textField1: UITextField! = {
        let tf = UITextField()
        tf.text = ""
        return tf
    }()

    var textField2: UITextField! = {
        let tf = UITextField()
        tf.text = ""
        return tf
    }()

    var textField3: UITextField! = {
        let tf = UITextField()
        tf.text = ""
        return tf
    }()

    var textField4: UITextField! = {
        let tf = UITextField()
        tf.text = ""
        return tf
    }()

    var textField5: UITextField! = {
        let tf = UITextField()
        tf.text = ""
        return …
Run Code Online (Sandbox Code Playgroud)

uitextfield ios swift swift4

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