如何使用NSDictionary

问题描述 投票:3回答:2

我试着理解如何在NSDictionary中使用,所以我创建了2个文件,第一个是bookStore

这是界面:

#import <Foundation/Foundation.h>
#import "Book.h"


@interface Bookstore : NSObject {

    NSDictionary* myBookStore;

}

@property(retain) NSDictionary* myBookStore;

-(id)init;
-(void)printInvetory;
-(BOOL)addBook:(Book*)newBook;
-(BOOL)removeBookWithTitle:(NSString*)whichTitle;
-(BOOL) findBook:(NSString*)whatLook;
-(void) dealloc;


@end

这是实施

#import "Bookstore.h"
#import "Book.h"

@implementation Bookstore

@synthesize myBookStore;

-(id)init {

    self=[super init];
    if (self!=nil) {
        myBookStore=[[NSMutableDictionary alloc] init];
    }
    return self;

}

-(BOOL)addBook:(Book*)newBook {

    [myBookStore setObject:newBook forKey:newBook.title];
    return YES;

}

-(BOOL) removeBookWithTitle:(NSString *)whichTitle {

//    if ([myBookStore ObjectForKey:whichTitle]!=nil) {
        [myBookStore removeObjectForKey:whichTitle];
        return YES;

 //   }

    return NO;

}

-(BOOL) findBook:(NSString *)whatLook {

    Book *book;
    for (NSString* key in myBookStore) {
       if ([myBookStore objectForKey:key]==whatLook ){
            book=[myBookStore objectForKey:key];
            NSLog(@"      Title: %@ ",book.title);
            NSLog(@"     Author: %@ ",book.author);
            NSLog(@"Description: %@ ",book.description);
            NSLog(@"Id number: %d " , book.idNumber);
        }



    }

}

-(void) printInvetory {

    Book *book;
    for (NSString* key in myBookStore) {
        book= [ myBookStore objectForKey:key];
        NSLog(@"      Title: %@ ",book.title);
        NSLog(@"     Author: %@ ",book.author);
        NSLog(@"Description: %@ ",book.description);
        NSLog(@"Id number: %d " , book.idNumber);
    }

}

-(void) dealloc {

    self.myBookStore = nil;
    [super dealloc];

}



@end

第二本是书

这是界面

#import <Foundation/Foundation.h>

@interface Book : NSObject {

    NSString *title;
    NSString *author;
    NSString *description;
    int idNumber;
}

@property (nonatomic,retain) NSString* title;
@property (nonatomic,retain) NSString* author;
@property (nonatomic,retain) NSString* description;
@property (nonatomic) int idNumber;

-(id) initWithTitle:(NSString*)newTitle author:(NSString*)newAuthor description:(NSString*)newDescription idNumber:(int) newIdNumber;




@end

这是实施

#import "Book.h"

@implementation Book

@synthesize title,author,description,idNumber;

-(void) initWithTitle:(NSString*)newTitle author:(NSString*)newAuthor description:(NSString*)newDescription idNumber:(int)newIdNumber {

    title=newTitle;
    author=newAuthor;
    description=newDescription;
    idNumber=newIdNumber;

}

@end

这是主文件

#import <Foundation/Foundation.h>
#import "Book.h"
#import "Bookstore.h"

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        NSString* find=@"gingi";
        // insert code here...
        Bookstore* theBookNook = [[Bookstore alloc] init];
        NSString* newTitle = @"A Farwell To Arms";
        Book* newBook = [[Book alloc] initWithTitle:newTitle author:@"Ernest Hemingway" description:@"The story of an " "affair between an English nurse and an American soldier on the Italian front during World War I." idNumber:3];
        [theBookNook addBook:newBook];
        newTitle =@"gingi";
        [newBook initWithTitle:newTitle author:@"bla bla" description:@"bla bla bla" idNumber:98];
        [newBook release];
        [theBookNook addBook:newBook];
        [theBookNook findBook:find];
        [theBookNook release];

    }
    return 0;
}

我有3个问题:

1:为什么当我添加第二本书然后我打印所有的书我看到的是同一本书

例如,在此输入中输出将是

2012-04-10 15:26:45.476 MyBookstore[43574:403]       Title: gingi 
2012-04-10 15:26:45.478 MyBookstore[43574:403]      Author: bla bla 
2012-04-10 15:26:45.478 MyBookstore[43574:403] Description: bla bla bla 
2012-04-10 15:26:45.479 MyBookstore[43574:403] Id number: 98 
2012-04-10 15:26:45.479 MyBookstore[43574:403]       Title: gingi 
2012-04-10 15:26:45.480 MyBookstore[43574:403]      Author: bla bla 
2012-04-10 15:26:45.480 MyBookstore[43574:403] Description: bla bla bla 
2012-04-10 15:26:45.481 MyBookstore[43574:403] Id number: 98

2:我不明白为什么findBook方法不起作用? 3:我想知道我是否可以在NSDictionary中找到书籍而不使用密钥(在我的例子中,密钥是标题),如作者或idNumber?

objective-c nsdictionary
2个回答
0
投票

在findBook()里面..你正在做一个字符串匹配所以使用

if ([[myBookStore objectForKey:key] isEqualToString:whatLook] ){

代替

 if ([myBookStore objectForKey:key]==whatLook ){

0
投票
  1. 添加书籍对象时,请执行以下操作: Book* newBook = [[Book alloc] initWithTitle:newTitle author:@"Ernest Hemingway" description:@"The story of an " "affair between an English nurse and an American soldier on the Italian front during World War I." idNumber:3]; [theBookNook addBook:newBook]; [newBook release]; newTitle =@"gingi"; newBook = [[Book alloc] initWithTitle:newTitle author:@"bla bla" description:@"bla bla bla" idNumber:98]; [theBookNook addBook:newBook]; [newBook release];
  2. 更改您的findBook:方法如下: -(BOOL)findBook:(NSString *)whatLook{ Book *book; for (NSString* key in [myBookStore allKeys]) { if ([[myBookStore objectForKey:key] isEqualToString:whatLook] ) { book=[myBookStore objectForKey:key]; NSLog(@" Title: %@ ",book.title); NSLog(@" Author: %@ ",book.author); NSLog(@"Description: %@ ",book.description); NSLog(@"Id number: %d " , book.idNumber); } } }
© www.soinside.com 2019 - 2024. All rights reserved.