2015-02-02 12 views
9

tôi dường như không thể tìm ra những gì tôi đang làm sai để tạo ra các lỗi sau:Không phân lớp NSInputStream từ Swift (initWithData: unrecognizer selector)

2015-02-02 12:48:17.029 InputStreams[14816:221224] -[InputStreams.CustomStream initWithData:]: unrecognized selector sent to instance 0x7fda2e1aac30 

Đây là CustomStream lớp con tôi.

import Foundation 

class CustomStream : NSInputStream { 
    let streamName = "My Custom Stream" 

    override init(data: NSData) { 
     super.init(data: data) 
    } 
} 

Và đây là một ví dụ nhanh như thế nào tôi đang cố gắng để nhanh chóng nó:

import UIKit 

class ViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let stream = CustomStream(data: NSData()) 
     println("Stream Name: \(stream.streamName)") 
    } 
} 

Bất kỳ trợ giúp sẽ được đánh giá rất nhiều.

+0

Vì vậy, chúng tôi nghĩ đây có phải là lỗi không? Với thực tế là điều này đã được mở cho nhiều ngày này tôi nghĩ rằng đó là khoảng thời gian để nộp một radar. – cnoon

+1

Tôi đã gửi [radar] sau đây (http://openradar.appspot.com/radar?id=4504359098384384). Xin vui lòng dupe nếu bạn có cùng một vấn đề. Nếu bạn không tìm ra, hãy giúp đỡ! – cnoon

+0

Tôi gặp phải vấn đề tương tự. Thành thật mà nói, nó cũng tấn công tôi như một lỗi mà tôi phải gọi một trong những người khởi tạo được chỉ định của họ (ví dụ: với 'NSData' hoặc' NSURL') khi toàn bộ mục đích của phân lớp là tôi có thể không muốn sử dụng một trong số đó. Thành thật mà nói, phân lớp 'NSInputStream' luôn luôn có vấn đề (xem http://blog.bjhomer.com/2011/04/subclassing-nsinputstream.html), nhưng tôi đã hy vọng họ đã xem xét điều này hơn [8 năm qua] (http://lists.apple.com/archives/macnetworkprog/2007/May/msg00056.html). – Rob

Trả lời

0

Tôi đã tìm thấy giải pháp sử dụng convinence init.

class CustomStream : NSInputStream { 
    let streamName = "My Custom Stream" 
    // var data:NSData!   

    convenience override init(data: NSData) { 
     self.init() 
     // do inialization. 
     // self.data = data 
    } 

    convenience init() { 
     self.init() 
    } 
} 

Thành thật mà nói tôi đã không tìm ra lý do tại sao nó works.I đang đề cập đến Class Inheritance and Initialization để biết thêm information.Please để lại nhận xét nếu bạn có bất kỳ ý tưởng về nó.

Một điều nữa, nó được coi là an toàn hơn để sử dụng CFCreateBounderPair chứ không phải để phân lớp NSInputStream .Tôi đã cố gắng để chuyển đổi ALAsset để NSInputStream thành công trong cả hai cách successfully.The đang có sẵn ở đây ALAssetToNSInputStream.

Các vấn đề liên quan