@interface Grade : NSObject<NSCoding>
@property (copy, nonatomic)NSString *name;
@property int score;
-(id)initWithName:(NSString *)name andScore:(int)score;
-(void)print;
//-(NSComparisonResult)comparePerson:(Person *)person
@end
#import "Grade.h"
@implementation Grade
-(id)initWithName:(NSString *)name andScore:(int)score{
if (self = [super init]) {
self.name = name;
self.score = score;
}
return self;
}
-(void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeInt:self.score forKey:@"score"];
}
-(id)initWithCoder:(NSCoder *)aDecoder{
if (self = [super init]) {
self.name = [aDecoder decodeObjectForKey:@"name"];
self.score = [aDecoder decodeIntForKey:@"score"];
}
return self;
}
-(void)print{
NSLog(@"name: %@ score: %d",self.name,self.score);
}
自定义排序方法
//-(NSComparisonResult)compareGrade:(Grade *)g{
// //默认按分数排序
// NSComparisonResult result = [[NSNumber numberWithInt:g.score] compare:[NSNumber numberWithInt:self.score]];//注意:基本数据类型要进行数据转换
// //如果分数一样,就按照名字排序
// if (result == NSOrderedSame) {
// result = [self.name compare:g.name];
// }
// return result;
//}
@end
#import <Foundation/Foundation.h>
#import "Grade.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Grade *g1 = [[Grade alloc]initWithName:@"liucan" andScore:100 ];
Grade *g2 = [[Grade alloc]initWithName:@"pengfan" andScore:98];
Grade *g3 = [[Grade alloc]initWithName:@"jiekangwei" andScore:59];
Grade *g4 = [[Grade alloc]initWithName:@"wenbing" andScore:75 ];
NSArray *ranklist = [NSMutableArray arrayWithObjects:g1,g2,g3,g4, nil];//把所有对象集中到ranklist数组对象中
//使用selector排序
//输出各个对象的姓名和分数
// [ranklist makeObjectsPerformSelector:@selector (print)];
//创建第一个NSSortDescriptor对象,以名字为描述符排序
// NSSortDescriptor *rank1 = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
//创建第二个NSSortDescriptor对象,以分数为描述符排序
// NSSortDescriptor *rank2 = [NSSortDescriptor sortDescriptorWithKey:@"score" ascending:YES];
//把所有描述符集中到对象数组中,先排分数,再排姓名
// NSArray *arr = [NSArray arrayWithObjects:rank2,rank1,nil];
// NSArray *arr1 = [ranklist sortedArrayUsingDescriptors:arr];
// [arr1 makeObjectsPerformSelector:@selector (print)];
//使用Block排序
NSArray *ranklist2 = [ranklist sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
Grade *p1 = (Grade *)obj1;
Grade *p2 = (Grade *)obj2;
NSComparisonResult result;
result = [[NSNumber numberWithInt:p1.score]compare:[NSNumber numberWithInt:p2.score]];
if (result == NSOrderedSame) {
result = [p1.name compare:p2.name];
}
return result;
}];
// for(Grade *g in ranklist2){
// //NSLog(@"name: %@ score: %d ",g.name,g.score);
// [g print];
// }
//归档
NSString *homepath = NSHomeDirectory();
NSString *path = [homepath stringByAppendingPathComponent:@"ranklist.plist"];
if ([NSKeyedArchiver archiveRootObject:ranklist2 toFile:path]) {
NSLog(@" 归档成功");
}
//解档,并读取归档文件加载数据
NSArray *ranklist3 = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
NSLog(@" ranklist ");
for(Grade *g in ranklist3){
//NSLog(@"解档后: name: %@ score: %d ",g.name,g.score);
[g print];
}
return 0;
}
2014-07-31 20:12:55.857 Grade[1077:303] 归档成功
2014-07-31 20:12:55.859 Grade[1077:303] ranklist
2014-07-31 20:12:55.859 Grade[1077:303] name: jiekangwei score: 59
2014-07-31 20:12:55.859 Grade[1077:303] name: wenbing score: 75
2014-07-31 20:12:55.859 Grade[1077:303] name: pengfan score: 98
2014-07-31 20:12:55.860 Grade[1077:303] name: liucan score: 100
Program ended with exit code: 0