我有以下情况。我从xml feed和facebook graph api导入数据,在这种情况下是帖子。我想将这些数据合并到一个数组中,并对包含的日期数据进行排序。
我现在有以下内容:
[containerArray addObject: [NSMutableArray arrayWithObjects: created_time, message, picture, fbSource, nil ]
];
这会创建一个二维数组,但我想在created_time上订购所有条目。
我怎样才能最好地解决这个问题? Thnx提前!!
答案 0 :(得分:5)
创建一个包含必要实例变量而不是可变数组的数据类。然后,您可以使用NSArray类的各种排序方法,例如sortedArrayUsingDescriptors
。
排序可能如下所示:
NSSortDescriptor *sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"created_time"
ascending:YES] autorelease];
NSArray *sortedArray = [containerArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
[sortDescriptor release];
修改强>
引用福勒先生的书Refactoring: Improving the Design of Existing Code。
将数组替换为对象
你有一个数组,其中某些元素意味着不同的东西。
使用包含每个元素字段的对象替换数组
...
<强>动机强>
数组是组织数据的常用结构。但是,它们应仅用于按照somre顺序包含类似对象的集合。
这就是我们想要做的。让我们创建一个简单的Posts类。您可以轻松添加自定义初始值设定项,它接受四个值作为参数,或者甚至是一个便捷类方法,以便稍后返回自动释放的对象。这只是一个基本的骨架:
@interface Posts : NSObject
{
NSDate *created_time;
NSString *message;
UIImage *picture;
id fbSource; // Don't know what type :)
}
@property (nonatomic, retain) NSDate *created_time;
@property (nonatomic, copy) NSString *message;
@property (nonatomic, retain) UIImage *picture;
@property (nonatomic, retain) id fbSource;
@end
#import "Post.h"
@implementation Post
@synthesize created_time, message, picture, fbSource;
#pragma mark -
#pragma mark memory management
- (void)dealloc
{
[created_time release];
[message release];
[picture release];
[fbSource release];
[super dealloc];
}
#pragma mark -
#pragma mark initialization
- (id)init
{
self = [super init];
if (self) {
// do your initialization here
}
return self;
}
编辑2
将Post对象添加到数组中:
Post *newPost = [[Post alloc] init];
newPost.reated_time = [Date date];
newPost.message = @"a message";
newPost.picture = [UIImage imageNamed:@"mypic.jpg"];
// newPost.fbSource = ???
[containerArray addObject:newPost];
[newPost release];