2014-10-30 3 views
-1

사용자 정의 객체의 배열을 정렬하려고했습니다. 배열에 하나의 객체가 포함되어 있으면 객체가있는 정렬 된 Array를 반환합니다.신속하게 사용자 정의 객체의 NSMutableArray를 정렬하십시오.

*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<pjct.Plans 0x7fb8a7bb7af0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key price.' 
+0

코드가 실제로 작동합니다. 사용중인 xcode의 버전은 무엇입니까? 어떻게'array' 변수를 초기화 했습니까? –

+0

Xcode 6.1을 사용하고 있습니다. json 응답을 배열로 매핑하고 배열을 가격순으로 정렬하려고했습니다. –

+0

배열에'Plans' 유형의 객체가 포함되지 않은 것 같습니다. json 응답을 배열로 변환하는 데 사용한 코드를 표시해야합니다. –

답변

3

먼저 Plans 클래스가 구현을 ComparableEquatable되어 있는지 확인 :

self.price(array,sortKey:"price") //array contains array of Plans objects 

충돌 : 배열 여러 객체를 포함하는 경우, 그것은

class Plans:NSObject{ 
    var price:Int 

    var name:String? 
    .. 
    .. 
    .. 
} 


func price(array:NSMutableArray,sortKey:NSString)->Int{ 
     var sortDescriptor:NSSortDescriptor = NSSortDescriptor(key: sortKey, ascending: true) 
     var sortedArray:NSArray = array.sortedArrayUsingDescriptors([sortDescriptor])//Crashes 
     var apt:Plans = sortedArray.objectAtIndex(0) as Plans 
     return apt.price 
} 

함수 호출을 추락했다.

func ==(lhs: Plans, rhs: Plans) -> Bool { 
    return lhs.price == rhs.price 
} 

func <(lhs: Plans, rhs: Plans) -> Bool { 
    return lhs.price < rhs.price 
} 

지금 당신은 당신의 배열을 정렬 표준 연산자를 사용할 수 있습니다 :

extension Plans: Comparable {} 
extension Plans: Equatable {} 

그런 다음 두 가지 기능을 구현하는 방법은 다음과 같습니다이다. 방법은 다음과 같습니다

let sortedArray = (objcArray as AnyObject as [Plans]).sorted(<) 

입니다 아니면 구현하지 않으려면이 단순히 같은 배열을 정렬 할 수 있습니다 프로토콜 :

let sortedArray = (objcArray as AnyObject as [Plans]).sorted {$0.price < $1.price} 
+0

NSMutableArray에 정렬 –

+0

멤버가 없습니다. 배열 mustafa

+0

으로 캐스팅 할 수 있습니다. 어떻게 캐스팅 할 수 있습니까? 나는 이것을 시도했다. (배열 배열 로 plansArray) .sort (<). "형식 배열의 변경 불가능한 값 에만 변형 멤버가 있습니다." –

1

확인합니다. 마침내 문제를 파악할 수있었습니다. Int 값이 포함 된 배열을 정렬 할 수 없습니다. 그래서 내가

var price:NSNumber 

지금은 작동

에의 NSNumber

var price:Int 

에 지능에서 "가격"로 변경.

+1

내가 왜 투표가 중단되었는지 알 수 있습니까? –

관련 문제