(新人上路)成绩单实现对象三种排序方法 及归档解归档方法

来源:互联网 发布:d80军刀图纸数据 编辑:程序博客网 时间:2024/06/05 14:26
#import <Foundation/Foundation.h>

@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

0 0
原创粉丝点击