访问一个Dictionarys数组?

fuz*_*oat 0 cocoa objective-c

我对以下代码有几个问题:

(1)"newItem"是一个自动释放的对象吗?它从指定的数组索引获取返回的字典?

(2)是否有一种简单的方法可以在一次点击中访问一系列词典,或者我按照您的预期方式进行操作?

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    NSMutableArray *menu = [[NSMutableArray alloc] init];
    NSMutableDictionary *menuItem;
    NSMutableDictionary *newItem;

    NSArray *itemName = [NSArray arrayWithObjects:
                        @"Latte Medio",
                        @"Cappucion Medio",
                        @"Mocha Medio",
                        @"Vanilla Latte Medio",nil];

    NSArray *itemFat  = [NSArray arrayWithObjects:     
                        [NSNumber numberWithFloat:6.9],
                        [NSNumber numberWithFloat:4.7],
                        [NSNumber numberWithFloat:6.6],
                        [NSNumber numberWithFloat:6.9],nil];

    NSArray *itemCals = [NSArray arrayWithObjects: 
                        [NSNumber numberWithInt:516],
                        [NSNumber numberWithInt:408],
                        [NSNumber numberWithInt:624],
                        [NSNumber numberWithInt:743],nil];

    NSLog(@"DICTARRAY ... Start");

    // Create menuItem object
    menuItem = [[NSMutableDictionary alloc] init];
    [menuItem setObject:[itemName objectAtIndex:0] forKey:@"product"];
    [menuItem setObject:[itemFat objectAtIndex:0] forKey:@"fat"];
    [menuItem setObject:[itemCals objectAtIndex:0] forKey:@"calories"];

    // Add menuItem object to menu
    [menu addObject:menuItem];
    [menuItem release], menuItem = nil;

    // Access menu to get menuItem
    newItem = [menu objectAtIndex:0];
    NSLog(@"DATA: %@",[newItem objectForKey:@"product"]);
    NSLog(@"DATA: %@",[newItem objectForKey:@"fat"]);
    NSLog(@"DATA: %@",[newItem objectForKey:@"calories"]);

    // Clean up
    [menu release], menu = nil;
    [pool drain];
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

加里

Jef*_*ley 7

您存储此信息的方式似乎很奇怪.当你正在处理的物品(或物品)真的是咖啡饮料时,你将所有的名字,所有的脂肪和所有的卡路里存储在一起.制作一个新对象可能会更容易,比方说CoffeeDrink如下:

@interface CoffeeDrink:NSObject {
    NSString *name;
    NSNumber *fat;
    NSNumber *calories;
}

@property( retain ) NSString *name;
@property( retain ) NSNumber *fat;
@property( retain ) NSNumber *calories;

@end
Run Code Online (Sandbox Code Playgroud)

然后,在您的代码中,您可以拥有NSArray不同的CoffeeDrinks.

  • 这被称为模型对象,编写功能齐全的Cocoa应用程序是绝对必要的 - 不仅仅是出于复杂性的原因,还因为有些东西,比如Bindings和AppleScript支持,需要它们.有关如何正确制作一个的详细信息,请阅读"模型对象实施指南":http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ModelObjects/ (2认同)