小编EDU*_*sta的帖子

UIImagePickerController因内存压力而终止

我有一个UIViewController,它具有:

@property UIImagePickerController* mainPicker;
Run Code Online (Sandbox Code Playgroud)

并使用一个按钮,我正在呈现mainPicker,如:

- (IBAction)takePhoto:(UIButton *)sender
{
// Take a photo.

    if(![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
    {
    // No camera is available, show an alert.

        UIAlertView* newAlert = [[UIAlertView alloc] initWithTitle:@"Warning"
        message:@"Camera is not available." 
        delegate:self 
        cancelButtonTitle:@"OK" 
        otherButtonTitles:nil];

        [newAlert show];

        return;
    }

    if(mainPicker == nil)
    {
        mainPicker = [[UIImagePickerController alloc]init];

        mainPicker.delegate = self;
        mainPicker.allowsEditing = YES;  //I've tried without this line, didn't affect at all.
        mainPicker.sourceType = UIImagePickerControllerSourceTypeCamera;
    }

    [self presentViewController:mainPicker animated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)

第一个问题是;

Snapshotting a view that has not …
Run Code Online (Sandbox Code Playgroud)

objective-c uiimagepickercontroller ios7

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

具有通用(可选)用户默认值的属性包装器

适当参考:

https://github.com/apple/swift-evolution/blob/master/proposals/0258-property-wrappers.md#user-defaults

我们已经开始为 UserDefaults 使用属性包装器,它可以与非可选属性无缝协作。

但是,将可选属性设置为 nil 会崩溃:

[用户默认值] 尝试将非属性列表对象设置为键“someKeyThatWeSet”的 NSUserDefaults/CFPreferences 值

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“尝试为键“someKeyThatWeSet”插入非属性列表对象 null

下面的代码可以直接在 Playground 上测试:

@propertyWrapper
struct C2AppProperty<T> {
    let key: String
    let defaultValue: T

    init(_ key: String, defaultValue: T) {
        self.key = key
        self.defaultValue = defaultValue
    }

    var wrappedValue: T {
        get {
            return UserDefaults.standard.object(forKey: key) as? T ?? defaultValue
        }
        set {
            UserDefaults.standard.set(newValue, forKey: key)
        }
    }
}

struct C2User {
    @C2AppProperty("userID", defaultValue: nil)
    public static var publicUserID: String?
}

print(C2User.publicUserID)
C2User.publicUserID = "edusta"
print(C2User.publicUserID)
C2User.publicUserID …
Run Code Online (Sandbox Code Playgroud)

generics nsuserdefaults ios swift

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

数组中的 Swift 通用协议类类型

我们已经为我们的s实现了一个协议,Reusable以简化UITableView注册/出队实现UITableViewCell

protocol Reusable: class {
    static var defaultIdentifier: String { get }
}

extension Reusable where Self: UITableViewCell {
    static var defaultIdentifier: String {
        return String(describing: self)
    }
}

class TestTableViewCell: UITableViewCell, Reusable { }
class AnotherTestTableViewCell: UITableViewCell, Reusable { }
Run Code Online (Sandbox Code Playgroud)

然后,有一个扩展UITableView喜欢:

extension UITableView {
    func register<T: UITableViewCell & Reusable>(_: T.Type) {
        register(UINib(nibName: T.defaultIdentifier, bundle: nil), forCellReuseIdentifier: T.defaultIdentifier)
    }
}
Run Code Online (Sandbox Code Playgroud)

以及它的用法:

let tableView: UITableView = UITableView()
tableView.register(TestTableViewCell.self)
tableView.register(AnotherTableViewCell.self)
Run Code Online (Sandbox Code Playgroud)

一切正常,但我们想将这些类型移动到数组中,以便进行排序。这就是我们卡住的地方,这不起作用:

let viewCells = …
Run Code Online (Sandbox Code Playgroud)

ios swift swift-protocols

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