2

NSDate 形式の NSArray に連続していない日付の配列があります。配列に同じ日付のセットが必要ですが、dd/MM としてフォーマットされた NSString が必要です。元の配列から各日付を読み取って文字列に変換し、必要に応じてフォーマットする必要があると思いますが、元の配列をステップスルーする方法がわかりません。

NSError *error2;
NSArray *swim750mArray = [context executeFetchRequest:request2 error:&error2];
if (swim750mArray == nil) {
    NSLog(@"The fetch request2 returned an array == nil");
} else {
    NSLog(@"The fetch request2 returned an array...");
    NSLog(@"%@", swim750mArray);

NSArray *datesAsDates = [swim750mArray valueForKey:@"date"];
NSMutableArray* arrayOfDatesAsStrings = [NSMutableArray arrayWithCapacity:count];

    //SomeCode - Convert the Array of NSDates to a new Array of dates as NSStrings...

      for (int i=0; i<index; i++) {
           //get the date next NSDate from the array as: NSDate *dateAsDate...
           NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
           [dateFormat setDateFormat:@"dd/MM"];


         NSString *dateAsStr = [dateFormat stringFromDate:dateAsDate];

         [arrayOfDatesAsStrings addObject:dateAsStr];
        }

この回答は、既存の配列から読み込まれないことを除いて、私が必要とするものに近いものです:日付の配列で NSDate フォーマッターを使用する方法は?

助けてください!よろしくお願いします...

4

2 に答える 2

4

高速列挙の使用についてはどうですか?

for (NSDate* dateAsDate in datesAsDates) {
     //get the date next NSDate from the array as: NSDate *dateAsDate...
     NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
     [dateFormat setDateFormat:@"dd/MM"];

     NSString *dateAsStr = [dateFormat stringFromDate:dateAsDate];

     [arrayOfDatesAsStrings addObject:dateAsStr];
}
于 2012-11-02T18:54:56.223 に答える
1

jere named fast enumeration. It also could be done with block-based enumeration. Also you should create a formatter once and re-use it.

NSDateFormatter *dateFormater = [[NSDateFormatter alloc] init];
[dateFormater setDateFormat:@"dd/MM"];

NSMutableArray *datesAsStrings = [NSMutableArray array];
[datesAsDates enumerateObjectsUsingBlock:^(NSDate *date, NSUInteger idx, BOOL *stop){
     NSString *dateString = [dateFormater stringFromDate:date];
     [datesAsStrings addObject:dateString] 
}];

if you want to stick with the C-Style for, do

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"dd/MM"];
for (int i=0; i< [datesAsDates count]; i++) {       
    NSString *dateAsStr = [dateFormat stringFromDate:[dateAsDate objectAtIndex:i]]; 
    [arrayOfDatesAsStrings addObject:dateAsStr];
}

but due to mutation guards, enumeration is preferred.

于 2012-11-02T19:49:28.017 に答える