iOS 開發問題集錦(三)


介於群里大部分童鞋都是新手,為了大家能夠更好的提問,並且提的問題能更好的得到回答,下面寫幾點提問時的注意事項:

1、認真對待你的問題,在提問題前有過認真的思考;

2、先在 google 搜索,一般的問題都可以找到答案,在天朝google經常會抽抽,這個時候需要大家學會怎么去翻牆;

3、問題具體化,讓你的問題處於具體的環境中,把問題闡述清楚,避免大而空洞、需要具體情況來分析、或別人難以讀懂的問題;

4、話不在多,盡量提供精確的信息,把信息裁剪的越小越好。這樣做有幾點好處:首先表明你對你的提問付出了努力,可以增加回答的機會;其次,問題簡化后可以使有用答案出現的幾率增加;再次,在你提煉問題的時候,也許你自己就能找出問題的所在,然后做出修改;

5、明白你想問的是什么,能給你有用答案的人也正是最忙的人;

6、別用無意義的話語結束提問,例如:“有人能幫我嗎?”、“有人在嗎?”或者“有答案嗎?”之類的話。這樣問就是畫蛇添足,別人會很厭煩你;

7、盡量別出現錯別字,不然看不懂。

希望以上幾點能夠幫到大家。

下面是此次的問題集錦。

1、怎么分解url字符串,只要問號前邊的字符?或各個參數?如下字符串:

NSString *url = @"http://hzd.exi.hotchaleur.com/mp3_64_60/06/fc/06d7480aadbbcbb8bb7cee6f136c05fc.mp3?k=f2a52712bc03c5c3&t=1376447585";

a、以 "?" 來分割為字符串數組,然后取索引為 0 的字符

[url componentsSeparatedByString:@"?"][0]

b、把這個字符轉換為 NSURL類型,然后拼接字符串

NSURL *query = [NSURL URLWithString:url];
NSLog(@"url -> http://%@%@", query.host, query.path);

c、寫個獨立的方法,用字典的方式顯示url字符串中的各個參數,此方法只針對正確地url(錯誤的url請忽略...)

/**
 解析查詢字符串
 query : 查詢字符串,以 ‘&’ 分隔
 */
+ (NSDictionary *)parseQueryString:(NSString *)query {
    // 定義字典
    NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
    
    // 檢測字符串中是否包含 ‘?’
    NSRange range = [query rangeOfString:@"?"];
    if(range.location != NSNotFound){
        NSArray *queryArr = [query componentsSeparatedByString:@"?"];
        [dict setObject:queryArr[0] forKey:@"url"];
        query = queryArr[1];
    }else{
        // 如果一個url連 '?' 都沒有,那么肯定就沒有參數
        [dict setObject:query forKey:@"url"];
        return dict;
    }
    
    // 檢測字符串中是否包含 ‘&’
    if([query rangeOfString:@"&"].location != NSNotFound){
        // 以 & 來分割字符,並放入數組中
        NSArray *pairs = [query componentsSeparatedByString:@"&"];
        // 遍歷字符數組
        for (NSString *pair in pairs) {
            // 以等號來分割字符
            NSArray *elements = [pair componentsSeparatedByString:@"="];
            NSString *key = [[elements objectAtIndex:0] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
            NSString *val = [[elements objectAtIndex:1] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
            // 添加到字典中
            [dict setObject:val forKey:key];
        }
    }else if([query rangeOfString:@"="].location != NSNotFound){ // 檢測字符串中是否包含 ‘=’
        NSArray *elements = [query componentsSeparatedByString:@"="];
        NSString *key = [[elements objectAtIndex:0] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        NSString *val = [[elements objectAtIndex:1] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        // 添加到字典中
        [dict setObject:val forKey:key];
    }
    
    NSLog(@"dict -> %@", dict);
    return dict;
} 

2、設置App啟動頁,如下圖:

啟動頁圖片分為3中像素:320*480、640*960、640*1136。

首先拖動圖片到上圖3中相應的位置,然后在工程的AppDelegate.m中的下列方法中設置:

/*
 說明:當程序載入后執行
 **/
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //延時3秒,以便用戶看清楚啟動頁
    [NSThread sleepForTimeInterval:3.0];
    
    // 添加啟動頁
    UIImageView *splashScreen = [[UIImageView alloc] initWithFrame:self.window.bounds];
    if (iPhone5) {
        splashScreen.image = [UIImage imageNamed:@"Default-568h"];
    }else{
        splashScreen.image = [UIImage imageNamed:@"Default"];
    }
    [self.window addSubview:splashScreen];
    
    // 啟動頁漸變效果
    [UIView animateWithDuration:0.5 animations:^{
        CATransform3D transform = CATransform3DMakeScale(1.0, 1.0, 1.0);
        splashScreen.layer.transform = transform;
        splashScreen.alpha = 0.0;
    } completion:^(BOOL finished) {
        [splashScreen removeFromSuperview];
    }];
    
    [self.window makeKeyAndVisible];
    
    return YES;
}

上述代碼片段中,iPhone5是一個宏定義,如下:

#define iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)

3、點擊背景視圖,收起輸入法。

在 - (void)viewDidLoad 中添加如下代碼:

// 設置 self.view GestureRecognizer
    UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleBackgroundTap:)];
    tapRecognizer.cancelsTouchesInView = NO;
    [self.view addGestureRecognizer:tapRecognizer];

然后,編寫 handleBackgroundTap: 方法

/*
 點擊背景時關閉鍵盤
 **/
-(void)handleBackgroundTap:(UITapGestureRecognizer *)sender{
    [self.userName resignFirstResponder];
    [self.userPassword resignFirstResponder];
}

4、刪掉字符串中的包含的html標簽,以及轉義符

/**
 刪掉字符串中的包含的html標簽,以及轉義符
 strHtml : 含有html標簽的字符串
 */
+ (NSString *)stringByStrippingHTML:(NSString *)strHtml{
    NSRange r;
    NSString *s = [strHtml copy];
    while ((r = [s rangeOfString:@"<[^>]+>|&[^;]+;" options:NSRegularExpressionSearch]).location != NSNotFound){
        s = [s stringByReplacingCharactersInRange:r withString:@""];
    }
    return s;
}

5、獲得今天為星期幾

/**
 獲得今天為星期幾
 */
+ (NSInteger)getweek{
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *comps = [[NSDateComponents alloc] init];
    NSInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit |
    NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;

    comps = [calendar components:unitFlags fromDate:[NSDate date]];
    return [comps weekday] - 1;
}

 

著作權聲明:本文由 http://wzrong.cnblogs.com 或者 http://iostour.diandian.com 原創,歡迎轉載分享。 請尊重作者勞動,轉載時保留該聲明和作者博客鏈接,謝謝!

 


 

原創文章,如需轉載請注明出處,謝謝!

歡迎訪問本人技術微博 @iOS之旅 相互交流,共同學習,共同進步!

歡迎訪問本人微博 @衛志榮

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM