저는 스위프트로 최근에 놀고 있습니다. 사용자 정의 TableView 검색 기능을 수행하고있다. 내 검색 작업을 완벽하게하기 위해 this 사람을 따라 갔지만 NSArray에서 Swift Array 로의 변환시 문제가 있습니다.NSArray를 스위프트 배열로 변환 한 후 배열이 비어 있습니다.
여기 내 코드입니다.
func updateSearchResultsForSearchController(searchController: UISearchController) {
filtered.removeAll(keepCapacity: false)
proccessArray.removeAll(keepCapacity: false)
print("start")
var array = []
for i in 0...arrProcessName.count{
if(arrProcessName[safe: i] != nil && arrRequestedBy[safe: i] != nil && arrCreationTime[safe: i] != nil && arrStatus[safe: i] != nil)
{
var newProcess = Process(process: arrProcessName[i], requestor: arrRequestedBy[i], time: arrCreationTime[i], status: arrStatus[i])
self.proccessArray.append(newProcess)
}
}
print("array: ", proccessArray)
let searchPredicate = NSPredicate(format: "status CONTAINS[c] %@", "pending")
array = (proccessArray as NSArray).filteredArrayUsingPredicate(searchPredicate)
print("array: ", array)
let arr2 = (array as Array).map { $0 as? String ?? "" }
filtered = arr2
print("filtered: ", filtered)
if(filtered.count == 0){
searchActive = false;
} else {
searchActive = true;
}
tableView?.reloadData()
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
removeProgressBar()
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! HistoryCustomCell
cell.selectionStyle = .None
cell.accessoryType = UITableViewCellAccessoryType.None
if self.searchCtrler.active {
print("processArray: ",proccessArray[indexPath.row].status as String!)
cell.lbl_status.text = proccessArray[indexPath.row].status as String!
} else {
cell.lbl_request_name.text = arrProcessName[indexPath.row]
cell.lbl_requested_by.text = "Requested by: " + arrRequestedBy[indexPath.row]
cell.lbl_creation_time.text = arrCreationTime[indexPath.row]
cell.lbl_status.text = arrStatus[indexPath.row]
switch arrStatus[indexPath.row] {
case "Completed", "Approved":
cell.img_status.image = UIImage(named: "ic_approved")
case "Running", "Processing", "Pending":
cell.img_status.image = UIImage(named: "ic_pending")
case "Denied", "Rejected":
cell.img_status.image = UIImage(named: "ic_reject")
case "Error":
cell.img_status.image = UIImage(named: "ic_terminated")
case "Retracted":
cell.img_status.image = UIImage(named: "ic_retracted")
default:
cell.img_status.image = UIImage(named: "")
}
}
return cell
}
클래스 프로세스
import Foundation
class Process:NSObject{
var process: NSString!
var requestor: NSString!
var time: NSString!
var status: NSString!
init(process:NSString, requestor:NSString, time: NSString, status: NSString){
self.process = process
self.requestor = requestor
self.time = time
self.status = status
}
}
내가 배열을 인쇄 한 결과는 다음과 같이한다.
array: (
"< X.Process: 0x7f8bc94cfa50>"
)
변환 후 필터링 됨. 나는 EXC_BAD_INSTRUCTION을 치는 빈 배열을 얻는다.
NSArray
을 NSArray 내부 데이터에 영향을 미치지 않고 Swift Array로 변환 할 수 있습니까?
[Process]
배열을 필터링 할 수 있습니다 단지 필터
NSArray
에 스위프트 배열
[Process]
을 변환 할 필요가 없습니다 당신
있는 tableView 위임 방법의 내용을 추가하십시오 – iMHitesh
proccessArray가 포함되지 않은 문자열을 직접 월 사용자 정의 클래스 객체'프로세스를 포함 '그리고 필터 배열에서 선택적'String'으로 변환하려고합니다. 즉, 필터 배열에 빈 문자열 객체가 들어있는 이유입니다. –
@NiravD 그래서 그것에 대해 무엇을 할 수 있습니까? –