Xcode怎样实现收藏功能

梦幻使者智智 发布于 2014/11/26 21:13
阅读 447
收藏 0

我们oc老师让我们唐诗三百首实现收藏功能   


这是扩展题




Xcode 实现收藏功能




//
//  main.m
//  唐诗三百首查询
//
//  Created by Mac on 14-11-11.
//  Copyright (c) 2014年 移动软件开发方向. All rights reserved.
//


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


void parseTS300();
void search(NSString* keyword, unsigned int type);


//用来放置所有解析出来的Poem对象的集合
NSMutableArray* poemList;


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


    @autoreleasepool {
//        NSString* s = @"田夫荷锄立,相见语依依。";
//        char firstChar = [s characterAtIndex:0];
//        char secondChar = [s characterAtIndex:1];
//        printf("firstChar=%c secondChar=%c\n\n",firstChar,secondChar);

        parseTS300();
        search(@"李白", 1);

    }
    return 0;
}


void search(NSString* keyword, unsigned int type){
    for (Poem* p in poemList) {
        NSString* source;
        switch (type) {
            case 1:
                source = p.author;
                break;
            case 2:
                source = p.title;
                break;
            case 3:
                source = p.content;
                break;
            default:
                break;
        }

        //进行匹配,NSRange是c语言中的结构体,不是类,所以无需加“*”
        NSRange range = [source rangeOfString:keyword];
        if (range.location != NSIntegerMax) {
            NSLog(@"%@", p);
        }
    }

}


void parseTS300(){
    NSString* filePath = @"/Users/mac/Desktop/ts300_cm.txt";

    //检测文件目录是否正常
    NSFileManager* manager = [NSFileManager defaultManager ];
    if ([manager fileExistsAtPath:filePath]) {
        NSLog(@"OK");
    }else{
        NSLog(@"not exist");
    }


    //读取文件内容:一次性的全部读取到NSData对象中
    NSData* contentData = [NSData dataWithContentsOfFile:filePath];
    //把NSData类型的对象转换为字符串对象(注意是UTF-8编码)
    NSString* content = [[NSString alloc]initWithData:contentData encoding:NSUTF8StringEncoding];


    //NSLog(@"%@", content);

    //一换行符“\r”为标志,将整个文件分离为一个数组对象,因此每一行字符串为一个数组对象的元素
    NSArray* contentArr = [content componentsSeparatedByString:@"\r"];
    NSLog(@"contentArr.count = %li", contentArr.count);

//    int i;
//    for (i=0; i<contentArr.count; i++) {
//        NSLog(@"%@", [contentArr objectAtIndex:i]);
//    }

    //初始化集合
    poemList = [[NSMutableArray alloc] init];
    //创建一个Poem对象,解析每一首诗都暂时放在poem中
    Poem* poem = nil;

    for (NSString* currLine in contentArr) {
        //如果是空行的话,直接跳过,否则下面的取字符操作会出异常(下标越界)
        if (currLine.length == 0) {
            continue;
        }

        //取出当前字符串中的第一个字符和第二个字符
        char firstChar = [currLine characterAtIndex:0];
        char secondChar = [currLine characterAtIndex:1];

        //如果满足下面的if语句中的关系表达式,则认为当前行为为诗词标题行
        if (firstChar>='0' && firstChar<='3' && secondChar>='0' && secondChar<='9') {
            //NSLog(@"%@", currLine);

            if (poem != nil) {
                [poemList addObject:poem];
                poem = nil;
            }

            NSArray* temp = [currLine componentsSeparatedByString:@":"];
            //数组的第一个元素是:"编号+作者"
            NSString* author = [temp firstObject];
            //数组的第二个元素是:"标题"
            NSString* title = [temp lastObject];
            //去掉作者前面的编号,从下标为3的字符开始就是作者
            author = [author substringFromIndex:3];
            //NSLog(@"author:%@  title:%@", author,title);

            poem = [[Poem alloc] init];
            poem.author = author;
            poem.title = title;
        }else{ //如果不是标题行,那么很可能是诗词内容行
            //NSLog(@"%@", currLine);
            if (poem != nil) {
                //这里要注意,如果content没有初始化的话,就不能执行拼接,所以在Poem的构造方法中专门对“_content”进行初始化
                poem.content = [poem.content stringByAppendingString:currLine];
            }

        }
    }
    //最后一首诗,需要单独添加到集合中
    [poemList addObject:poem];

//    for (Poem* p in poemList) {
//        NSLog(@"%@  %@ %@", p.author,p.title, p.content);
//    }
}



这是 main.m文件  





求大神帮忙。
加载中
返回顶部
顶部