Итак, я только что обновил свой swift до 2.0 и, очевидно, в моем коде появилось несколько ошибок. То, что у меня есть сейчас.Ошибка alloc() в swift
unc loadRssFeed(data: NSURL) {
var myRssParser : ParserManager = ParserManager.alloc().initWithURL(data) as! ParserManager
myRssFeed = myRssParser.feeds
tableView.reloadData()
}
Fixit предлагает изменить 'var' на 'let' и использовать инициализатор объекта вместо alloc(). Но проблема в том, что я никогда не использовал ее раньше (при условии, что мой опыт Swift похож на четыре недели).
Должен ли я следовать инструкциям fixit? И как исправить проблему alloc().
Спасибо!
Обновленный код остроумие парсер:
class ParserManager: NSObject, NSXMLParserDelegate {
var parser = NSXMLParser()
var feeds = NSMutableArray()
var elements = NSMutableDictionary()
var element = NSString()
var ftitle = NSMutableString()
var link = NSMutableString()
var fdescription = NSMutableString()
var fdate = NSMutableString()
func initWithURL(url :NSURL) -> AnyObject {
startParse(url)
return self
}
func startParse(url :NSURL) {
feeds = []
parser = NSXMLParser(contentsOfURL: url)!
parser.delegate = self
parser.shouldProcessNamespaces = false
parser.shouldReportNamespacePrefixes = false
parser.shouldResolveExternalEntities = false
parser.parse()
}
func allFeeds() -> NSMutableArray {
return feeds
}
func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) {
self.element = elementName
if self.element == "item" {
self.ftitle = ""
self.fdescription = ""
self.fdate = ""
}
}
func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
if (elementName as NSString).isEqualToString("item") {
if ftitle != "" {
elements.setObject(ftitle, forKey: "title")
}
if fdescription != "" {
elements.setObject(fdescription, forKey: "description")
}
if fdate != "" {
elements.setObject(fdate, forKey: "pubDate")
}
feeds.addObject(elements)
}
}
func parser(parser: NSXMLParser, foundCharacters string: String?) {
if element.isEqualToString("title") {
ftitle.appendString(string!)
}else if element.isEqualToString("description") {
fdescription.appendString(string!)
}else if element.isEqualToString("pubDate") {
fdate.appendString(string!)
}
}
}
Это должно быть просто 'пусть парсер = ParserManager (URL: данные) '. Не называйте 'alloc' и' init' следующим образом. – Rob
Теперь он говорит, что в вызове есть дополнительный аргумент «URL». Будет ли это помогать, если я добавлю свой код парсера в мой оригинальный пост? –
Это 'initWithURL' В классе' ParserManager' должен быть 'init' метод с параметром' URL'. – Rob