我在这里打电话给getBoardingCards:
BRPBoardingCards *boardingCards = [[BRPBoardingCards alloc] init];
boardingCardsArray = [boardingCards getBoardingCards];
虽然数组返回null(在NSLog中显示)。我做错了什么?
- (NSArray*)getBoardingCards
{
NSMutableArray *storedArray = [[NSMutableArray alloc] init];
Utils *utils = [[Utils alloc] init];
NSUserDefaults *properties = [utils getUserDefaults];
// check if its the first time we are running the app.
if(![[properties objectForKey:@"first_run"] isEqualToString:@"no"]){
//I decided it is for american tourists and every booking office allows payment in dollars because I dont have a euros key on my keyboard.
//Car also has lots of seats. 1337 of them to be precise.
[self setNewBoardingCardWithCardType:@"car" WithPrice:@"$1.50" AndStartLocation:@"airport" AndEndLocation:@"restaurant" WithSeat:@"1337" andExtraInformation:@"We dont like you so we are giving you the back seat by yourself."];
[self setNewBoardingCardWithCardType:@"helicopter" WithPrice:@"$500" AndStartLocation:@"restaurant" AndEndLocation:@"hospital" WithSeat:@"1" andExtraInformation:@"You are driving."];
[self setNewBoardingCardWithCardType:@"train" WithPrice:@"$100" AndStartLocation:@"restaurant" AndEndLocation:@"ditch" WithSeat:@"STANDONHEAD" andExtraInformation:@"No Seats on this train. Gotta stand on your head. Dont forget your white lightning for the ditch."];
[self setNewBoardingCardWithCardType:@"Fire Engine" WithPrice:@"$10" AndStartLocation:@"restaurant" AndEndLocation:@"burning house" WithSeat:@"HOSE" andExtraInformation:@"Take the hose to put out this fire we are heading to. "];
[self setNewBoardingCardWithCardType:@"Nimbus" WithPrice:@"$300" AndStartLocation:@"burning house" AndEndLocation:@"popo floating island" WithSeat:@"LEVITATION" andExtraInformation:@"Dont forget to turn super saiyan on your way up there. "];
[self setNewBoardingCardWithCardType:@"Sky Dive" WithPrice:@"$1020" AndStartLocation:@"popo floating island" AndEndLocation:@"home" WithSeat:@"GRAVITY" andExtraInformation:@"Ohh! that Adrenalines pumping. "];
[self setNewBoardingCardWithCardType:@"Legs" WithPrice:@"$50" AndStartLocation:@"ditch" AndEndLocation:@"park bench hotel" WithSeat:@"VODKA" andExtraInformation:@"Time to get a good nights rest and sobre up. "];
[self setNewBoardingCardWithCardType:@"Bicycle" WithPrice:@"$5" AndStartLocation:@"park bench hotel" AndEndLocation:@"home" WithSeat:@"BIKESEAT1" andExtraInformation:@"What a terrible hangover. Time to head home. "];
[self setNewBoardingCardWithCardType:@"ambulance" WithPrice:@"$40" AndStartLocation:@"hospital" AndEndLocation:@"home" WithSeat:@"LEVITATION" andExtraInformation:@"Well that was a bad idea! "];
[properties setObject:@"no" forKey:@"first_run"];
[properties synchronize];
NSLog(@"did set first run to no");
}
storedArray = [[properties objectForKey:@"cards"] mutableCopy];
NSLog(@"getBoardingCards storedArray: %@", storedArray);
return storedArray;
}
- (NSArray*)getBoardingCardsByType:(NSString*)cardType
{
// at this point i would create a for loop and iterate through the array checking if (type isEqualToString:cardType).
// But this is just an idea for later. To go by only a certain type of route.
return nil;
}
- (void)setNewBoardingCardWithCardType:(NSString*)cardType WithPrice:(NSString*)price AndStartLocation:(NSString*)startLocation AndEndLocation:(NSString*)endLocation WithSeat:(NSString*)seatCode andExtraInformation:(NSString*)extraInfo{
// populate the dictionary with data.
NSMutableDictionary *card = [[NSMutableDictionary alloc] init];
[card setObject:cardType forKey:@"type"];
[card setObject:price forKey:@"price"];
[card setObject:startLocation forKey:@"startLocation"];
[card setObject:endLocation forKey:@"endLocation"];
[card setObject:seatCode forKey:@"seat"];
[card setObject:extraInfo forKey:@"info"];
// get our stored array.
Utils *utils = [[Utils alloc] init];
NSUserDefaults *properties = [utils getUserDefaults];
NSMutableArray *storedArray = [[properties objectForKey:@"cards"] mutableCopy];
[storedArray addObject:card];
// set the stored array.
[properties setObject:storedArray forKey:@"cards"];
[properties synchronize];
}
答案 0 :(得分:4)
您没有在cards
中创建NSUserDefaults
可变数组。
这一行(setNewBoardingCardWithCardType:
):
NSMutableArray *storedArray = [[properties objectForKey:@"cards"] mutableCopy];
基本上是
NSMutableArray *storedArray = [nil mutableCopy];
与
相同NSMutableArray *storedArray = nil;
检查此密钥的对象是否存在 - 如果不存在 - 创建它然后再使用它。