QA@IT
«質問へ戻る

9
本文
 
 ```
 @IBOutlet weak var newsSearch: UISearchBar!
+var entries: NSMutableArray = NSMutableArray()【2014/11/9 追加】
 
 override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
         

Swiftで検索文字列にヒットしたNewsのみを表示する

いつも大変お世話になっております。Agaと申します。

Swiftを現在勉強中です。

ある参考書のサンプルプログラムを自分なりに改良
しています。(ニュースアプリ)

追加しようとしている機能は、検索文字列を入力し
更新をかけると、ヒットしたニュースのみを表示
させるというものです。

ですが、検索文字列がないニュースを削除できずにいます。
お手数おかけしますがご教授のほどよろしくお願い致します。

@IBOutlet weak var newsSearch: UISearchBar!
var entries: NSMutableArray = NSMutableArray()【2014/11/9 追加】

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        var cell : UITableViewCell

        if indexPath.row == 0 {
            cell = tableView.dequeueReusableCellWithIdentifier("top") as UITableViewCell
        }
        else{
            cell = tableView.dequeueReusableCellWithIdentifier("news") as UITableViewCell
        }

        var entry = entries[indexPath.row] as NSDictionary

        //検索文字が含まれるニュースのみを取り出す
        var searchStr : NSString = entry["title"] as NSString!
        var loc = searchStr.rangeOfString(newsSearch.text).location

        if loc == NSNotFound && newsSearch.text != "" {

            //検索文字がないニュースを削除する
            entries.removeObjectAtIndex(indexPath.row)

        } else if loc != NSNotFound && newsSearch.text != "" {

            var titleLabel = cell.viewWithTag(1) as UILabel
            titleLabel.text = entry["title"] as? String
            var descriptionLabel = cell.viewWithTag(2) as UILabel
            descriptionLabel.text = entry["contentSnippet"] as? String

            // NSDateFormatterを作って、日付を文字列に変換する
            var date = entry["date"] as NSDate
            var formatter = NSDateFormatter()
            formatter.locale = NSLocale(localeIdentifier: "ja-JP")
            formatter.dateStyle = NSDateFormatterStyle.LongStyle
            formatter.timeStyle = NSDateFormatterStyle.MediumStyle
            var dateStr = formatter.stringFromDate(date)

            var dateLabel = cell.viewWithTag(3) as UILabel
            dateLabel.text = dateStr

            var urlString = entry["url"] as String
            var index = find(newsUrlStrings, urlString)
            var imageName = imageNames[index!]
            var image = UIImage(named: imageName)

            var imageView = cell.viewWithTag(4) as UIImageView
            imageView.image = image

        } else {

            var titleLabel = cell.viewWithTag(1) as UILabel
            titleLabel.text = entry["title"] as? String
            var descriptionLabel = cell.viewWithTag(2) as UILabel
            descriptionLabel.text = entry["contentSnippet"] as? String

            // NSDateFormatterを作って、日付を文字列に変換する
            var date = entry["date"] as NSDate
            var formatter = NSDateFormatter()
            formatter.locale = NSLocale(localeIdentifier: "ja-JP")
            formatter.dateStyle = NSDateFormatterStyle.LongStyle
            formatter.timeStyle = NSDateFormatterStyle.MediumStyle
            var dateStr = formatter.stringFromDate(date)

            var dateLabel = cell.viewWithTag(3) as UILabel
            dateLabel.text = dateStr

            var urlString = entry["url"] as String
            var index = find(newsUrlStrings, urlString)
            var imageName = imageNames[index!]
            var image = UIImage(named: imageName)

            var imageView = cell.viewWithTag(4) as UIImageView
            imageView.image = image

        }

        return cell
    }

エラー内容
terminating with uncaught exception of type NSException

いつも大変お世話になっております。Agaと申します。

Swiftを現在勉強中です。

ある参考書のサンプルプログラムを自分なりに改良
しています。(ニュースアプリ)

追加しようとしている機能は、検索文字列を入力し
更新をかけると、ヒットしたニュースのみを表示
させるというものです。

ですが、検索文字列がないニュースを削除できずにいます。
お手数おかけしますがご教授のほどよろしくお願い致します。

```
@IBOutlet weak var newsSearch: UISearchBar!
var entries: NSMutableArray = NSMutableArray()【2014/11/9 追加】

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        var cell : UITableViewCell
        
        if indexPath.row == 0 {
            cell = tableView.dequeueReusableCellWithIdentifier("top") as UITableViewCell
        }
        else{
            cell = tableView.dequeueReusableCellWithIdentifier("news") as UITableViewCell
        }
        
        var entry = entries[indexPath.row] as NSDictionary
        
        //検索文字が含まれるニュースのみを取り出す
        var searchStr : NSString = entry["title"] as NSString!
        var loc = searchStr.rangeOfString(newsSearch.text).location
        
        if loc == NSNotFound && newsSearch.text != "" {
            
            //検索文字がないニュースを削除する
            entries.removeObjectAtIndex(indexPath.row)
            
        } else if loc != NSNotFound && newsSearch.text != "" {
            
            var titleLabel = cell.viewWithTag(1) as UILabel
            titleLabel.text = entry["title"] as? String
            var descriptionLabel = cell.viewWithTag(2) as UILabel
            descriptionLabel.text = entry["contentSnippet"] as? String
            
            // NSDateFormatterを作って、日付を文字列に変換する
            var date = entry["date"] as NSDate
            var formatter = NSDateFormatter()
            formatter.locale = NSLocale(localeIdentifier: "ja-JP")
            formatter.dateStyle = NSDateFormatterStyle.LongStyle
            formatter.timeStyle = NSDateFormatterStyle.MediumStyle
            var dateStr = formatter.stringFromDate(date)
            
            var dateLabel = cell.viewWithTag(3) as UILabel
            dateLabel.text = dateStr
            
            var urlString = entry["url"] as String
            var index = find(newsUrlStrings, urlString)
            var imageName = imageNames[index!]
            var image = UIImage(named: imageName)
            
            var imageView = cell.viewWithTag(4) as UIImageView
            imageView.image = image

        } else {
            
            var titleLabel = cell.viewWithTag(1) as UILabel
            titleLabel.text = entry["title"] as? String
            var descriptionLabel = cell.viewWithTag(2) as UILabel
            descriptionLabel.text = entry["contentSnippet"] as? String
            
            // NSDateFormatterを作って、日付を文字列に変換する
            var date = entry["date"] as NSDate
            var formatter = NSDateFormatter()
            formatter.locale = NSLocale(localeIdentifier: "ja-JP")
            formatter.dateStyle = NSDateFormatterStyle.LongStyle
            formatter.timeStyle = NSDateFormatterStyle.MediumStyle
            var dateStr = formatter.stringFromDate(date)
            
            var dateLabel = cell.viewWithTag(3) as UILabel
            dateLabel.text = dateStr
            
            var urlString = entry["url"] as String
            var index = find(newsUrlStrings, urlString)
            var imageName = imageNames[index!]
            var image = UIImage(named: imageName)
            
            var imageView = cell.viewWithTag(4) as UIImageView
            imageView.image = image
            
        }
        
        return cell
    }
```
エラー内容
terminating with uncaught exception of type NSException

質問を投稿

Swiftで検索文字列にヒットしたNewsのみを表示する

いつも大変お世話になっております。Agaと申します。

Swiftを現在勉強中です。

ある参考書のサンプルプログラムを自分なりに改良
しています。(ニュースアプリ)

追加しようとしている機能は、検索文字列を入力し
更新をかけると、ヒットしたニュースのみを表示
させるというものです。

ですが、検索文字列がないニュースを削除できずにいます。
お手数おかけしますがご教授のほどよろしくお願い致します。

@IBOutlet weak var newsSearch: UISearchBar!

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        var cell : UITableViewCell

        if indexPath.row == 0 {
            cell = tableView.dequeueReusableCellWithIdentifier("top") as UITableViewCell
        }
        else{
            cell = tableView.dequeueReusableCellWithIdentifier("news") as UITableViewCell
        }

        var entry = entries[indexPath.row] as NSDictionary

        //検索文字が含まれるニュースのみを取り出す
        var searchStr : NSString = entry["title"] as NSString!
        var loc = searchStr.rangeOfString(newsSearch.text).location

        if loc == NSNotFound && newsSearch.text != "" {

            //検索文字がないニュースを削除する
            entries.removeObjectAtIndex(indexPath.row)

        } else if loc != NSNotFound && newsSearch.text != "" {

            var titleLabel = cell.viewWithTag(1) as UILabel
            titleLabel.text = entry["title"] as? String
            var descriptionLabel = cell.viewWithTag(2) as UILabel
            descriptionLabel.text = entry["contentSnippet"] as? String

            // NSDateFormatterを作って、日付を文字列に変換する
            var date = entry["date"] as NSDate
            var formatter = NSDateFormatter()
            formatter.locale = NSLocale(localeIdentifier: "ja-JP")
            formatter.dateStyle = NSDateFormatterStyle.LongStyle
            formatter.timeStyle = NSDateFormatterStyle.MediumStyle
            var dateStr = formatter.stringFromDate(date)

            var dateLabel = cell.viewWithTag(3) as UILabel
            dateLabel.text = dateStr

            var urlString = entry["url"] as String
            var index = find(newsUrlStrings, urlString)
            var imageName = imageNames[index!]
            var image = UIImage(named: imageName)

            var imageView = cell.viewWithTag(4) as UIImageView
            imageView.image = image

        } else {

            var titleLabel = cell.viewWithTag(1) as UILabel
            titleLabel.text = entry["title"] as? String
            var descriptionLabel = cell.viewWithTag(2) as UILabel
            descriptionLabel.text = entry["contentSnippet"] as? String

            // NSDateFormatterを作って、日付を文字列に変換する
            var date = entry["date"] as NSDate
            var formatter = NSDateFormatter()
            formatter.locale = NSLocale(localeIdentifier: "ja-JP")
            formatter.dateStyle = NSDateFormatterStyle.LongStyle
            formatter.timeStyle = NSDateFormatterStyle.MediumStyle
            var dateStr = formatter.stringFromDate(date)

            var dateLabel = cell.viewWithTag(3) as UILabel
            dateLabel.text = dateStr

            var urlString = entry["url"] as String
            var index = find(newsUrlStrings, urlString)
            var imageName = imageNames[index!]
            var image = UIImage(named: imageName)

            var imageView = cell.viewWithTag(4) as UIImageView
            imageView.image = image

        }

        return cell
    }

エラー内容
terminating with uncaught exception of type NSException

いつも大変お世話になっております。Agaと申します。

Swiftを現在勉強中です。

ある参考書のサンプルプログラムを自分なりに改良
しています。(ニュースアプリ)

追加しようとしている機能は、検索文字列を入力し
更新をかけると、ヒットしたニュースのみを表示
させるというものです。

ですが、検索文字列がないニュースを削除できずにいます。
お手数おかけしますがご教授のほどよろしくお願い致します。

```
@IBOutlet weak var newsSearch: UISearchBar!

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        var cell : UITableViewCell
        
        if indexPath.row == 0 {
            cell = tableView.dequeueReusableCellWithIdentifier("top") as UITableViewCell
        }
        else{
            cell = tableView.dequeueReusableCellWithIdentifier("news") as UITableViewCell
        }
        
        var entry = entries[indexPath.row] as NSDictionary
        
        //検索文字が含まれるニュースのみを取り出す
        var searchStr : NSString = entry["title"] as NSString!
        var loc = searchStr.rangeOfString(newsSearch.text).location
        
        if loc == NSNotFound && newsSearch.text != "" {
            
            //検索文字がないニュースを削除する
            entries.removeObjectAtIndex(indexPath.row)
            
        } else if loc != NSNotFound && newsSearch.text != "" {
            
            var titleLabel = cell.viewWithTag(1) as UILabel
            titleLabel.text = entry["title"] as? String
            var descriptionLabel = cell.viewWithTag(2) as UILabel
            descriptionLabel.text = entry["contentSnippet"] as? String
            
            // NSDateFormatterを作って、日付を文字列に変換する
            var date = entry["date"] as NSDate
            var formatter = NSDateFormatter()
            formatter.locale = NSLocale(localeIdentifier: "ja-JP")
            formatter.dateStyle = NSDateFormatterStyle.LongStyle
            formatter.timeStyle = NSDateFormatterStyle.MediumStyle
            var dateStr = formatter.stringFromDate(date)
            
            var dateLabel = cell.viewWithTag(3) as UILabel
            dateLabel.text = dateStr
            
            var urlString = entry["url"] as String
            var index = find(newsUrlStrings, urlString)
            var imageName = imageNames[index!]
            var image = UIImage(named: imageName)
            
            var imageView = cell.viewWithTag(4) as UIImageView
            imageView.image = image

        } else {
            
            var titleLabel = cell.viewWithTag(1) as UILabel
            titleLabel.text = entry["title"] as? String
            var descriptionLabel = cell.viewWithTag(2) as UILabel
            descriptionLabel.text = entry["contentSnippet"] as? String
            
            // NSDateFormatterを作って、日付を文字列に変換する
            var date = entry["date"] as NSDate
            var formatter = NSDateFormatter()
            formatter.locale = NSLocale(localeIdentifier: "ja-JP")
            formatter.dateStyle = NSDateFormatterStyle.LongStyle
            formatter.timeStyle = NSDateFormatterStyle.MediumStyle
            var dateStr = formatter.stringFromDate(date)
            
            var dateLabel = cell.viewWithTag(3) as UILabel
            dateLabel.text = dateStr
            
            var urlString = entry["url"] as String
            var index = find(newsUrlStrings, urlString)
            var imageName = imageNames[index!]
            var image = UIImage(named: imageName)
            
            var imageView = cell.viewWithTag(4) as UIImageView
            imageView.image = image
            
        }
        
        return cell
    }
```
エラー内容
terminating with uncaught exception of type NSException