为什么我的数组返回null?

我曾经在这里呼吁getBoardingCards:为什么我的数组返回null?

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];

}

回答:

你没有创建于NSUserDefaultscards可变数组。 这行(setNewBoardingCardWithCardType:):

NSMutableArray *storedArray = [[properties objectForKey:@"cards"] mutableCopy]; 

基本上是

NSMutableArray *storedArray = [nil mutableCopy]; 

这是一样的

NSMutableArray *storedArray = nil; 

检查是否存在此键的对象,如果没有 - 创建然后使用它。

以上是 为什么我的数组返回null? 的全部内容, 来源链接: utcz.com/qa/264795.html

回到顶部