您的位置:首页 > 其它

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

2014-07-31 20:10 190 查看
#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: