iOS_开发中遇到的那些问题_3

【自编号:412】【以前分类里的内容可以参阅以下网址】 【进入网址】 【2015-06-25 11:02:54 by beyond】



【自编号:413】【iOS_MVVM设计模式】 【进入网址】 【2015-06-25 14:43:47 by beyond】



【自编号:414】【定制 由xib自动创建的自定义view】
例如diyBtn
- (void)awakeFromNib
{
    DLog(@"awakeFromNib")
}
(lldb) po self
>
【2015-06-25 14:49:24 by beyond】



【自编号:415】【iOS_reactive相关】 【进入网址】 【2015-06-25 15:27:12 by beyond】



【自编号:416】【详尽的自动布局】
要各占屏幕的一半,只需等宽,再设置边距即可
【进入网址】 【2015-06-25 18:56:59 by beyond】



【自编号:425】【NSURLProtocol】 【查看原文】 【2015-06-29 10:50:45 by beyond】



【自编号:426】【自定义NSURLProtocol,目的是拦截ajax请求】 【查看原文】 【2015-06-29 10:59:56 by beyond】



【自编号:428】【iOS 9 新增 UIStackView】 【查看原文】 【2015-06-29 14:48:56 by beyond】



【自编号:429】【iOS_计算总价】
- (NSString *)decimalNumberMutiplyWithString:(NSString *)multiplierValue andString:(NSString *)multiplicandValue
{
    DLog(@"%@----%@",multiplicandValue,multiplicandValue);
    NSDecimalNumber *multiplierNumber = [NSDecimalNumber decimalNumberWithString:multiplierValue];
    NSDecimalNumber *multiplicandNumber = [NSDecimalNumber decimalNumberWithString:multiplicandValue];
    NSDecimalNumber *product = [multiplicandNumber decimalNumberByMultiplyingBy:multiplierNumber];
    NSString * result = [product stringValue];
    DLog(@"乘积:%@",result);
    return result;
}
【2015-07-01 15:29:07 by beyond】



【自编号:431】【NSDecimalNumber精准计量】 【查看原文】 【2015-07-02 10:29:56 by beyond】



【自编号:433】【pop2ViewController】
- (void)pop2ViewCtrl
{
    NSArray *ctrls = self.navigationController.viewControllers ;
    int index = ctrls.count-3;
    if (index > 0) {
        UIViewController *vc = [ctrls objectAtIndex:index];
        [self.navigationController popToViewController:vc animated:YES];
    }else{
        [self doBack:nil];
    }

}
【2015-07-03 10:36:18 by beyond】



【自编号:434】【viewDidLoad时改约束是没有效果的】
必须在viewDidAppear中
        self.VConstraint.constant = -64;
        [self.view layoutIfNeeded];
【2015-07-03 11:58:13 by beyond】



【自编号:437】【RoundedRect下的textView高度调整】
xib    "Open As"-> "Source Code".  textField 検索

↓

【查看原文】 【2015-07-03 15:13:56 by beyond】



【自编号:438】【RoundedRect下的textView高度调整】
以代码形式打开xib:    "Open As"-> "Source Code". 検索 textField 
找到:rect key="frame" x="10" y="20" width="300" height="30"
【查看原文】 【2015-07-03 15:15:18 by beyond】



【自编号:440】【注册Cell,报错unable to dequeue a cell with identifier】
在viewDidLoad中,实现tableView的对象方法 即可
- (void)registerClass:(Class)cellClass forCellReuseIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(6_0);
【查看原文】 【2015-07-06 09:44:00 by beyond】



【自编号:444】【导航控制器的根控制器隐藏导航栏】
- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self.navigationController setNavigationBarHidden:YES animated:animated];
}


- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [self.navigationController setNavigationBarHidden:NO animated:animated];
}
【2015-07-06 14:57:37 by beyond】



【自编号:445】【app启动封面图尺寸】
Default.png                   320 480
[email protected]           640 960
[email protected]  640 920
[email protected]  640 1136
【2015-07-06 17:02:27 by beyond】



【自编号:447】【txt文件读取】
        NSString *cixing = @"动3";
        NSString *firstStr = [cixing substringToIndex:1];
// firstStr @"动"



//第一种方法: NSFileManager实例方法读取数据
        NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDesktopDirectory, NSUserDomainMask, YES);
        NSString* thepath = [paths lastObject];
        // (lldb) po thepath        /Users/beyond/Desktop

        thepath = [thepath stringByAppendingPathComponent:@"z_上.txt"];
        NSLog(@"桌面目录:%@", thepath);
        // /Users/beyond/Desktop/z_上.txt
        
        NSFileManager* fm = [NSFileManager defaultManager];
        NSData* data = [[NSData alloc] init];
        data = [fm contentsAtPath:thepath];
        NSString *textStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];//NSASCIIStringEncoding,NSUTF8StringEncoding
        NSLog(@"%@",textStr);
        
        
        //第二种方法: NSData类方法读取数据
        data = [NSData dataWithContentsOfFile:thepath];
        NSLog(@"NSData类方法读取的内容是:%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
        
        
        //第三种方法: NSString类方法读取内容
        NSString* content = [NSString stringWithContentsOfFile:thepath encoding:NSUTF8StringEncoding error:nil];
        NSLog(@"NSString类方法读取的内容是:\n%@",content);
        
        
        //第四种方法: NSFileHandle实例方法读取内容
        NSFileHandle* fh = [NSFileHandle fileHandleForReadingAtPath:thepath];
        data = [fh readDataToEndOfFile];
        NSLog(@"NSFileHandle实例读取的内容是:\n%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
【2015-07-07 10:51:50 by beyond】



【自编号:448】【tableView背景图片】
经常遇到要给tableView设置背景图片的问题,但如果直接设置背景  backgroundView的话,背景图不会显示,原因是  tableView上的cell默认是不透明的颜色,所以解决方法是 让  cell透明即可:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1.给tableView设置背景view  
  UIImageView *backImageView=[[UIImageViewalloc]initWithFrame:self.view.bounds];  
   [backImageView setImage:[UIImageimageNamed:@"liaotianbeijing"]];  
    self.tableView.backgroundView=backImageView;  
   
2.让cell透明  
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath  
{  
       
    
   MyCell  *cell = [tableViewdequeueReusableCellWithIdentifier:@"METext"forIndexPath:indexPath];  
    cell.backgroundColor=[UIColor clearColor];//关键语句  
    [cell setCellInfo:dic];//自定义类目方法  
     return cell;  
       
}
【2015-07-07 16:03:59 by beyond】



【自编号:449】【语音合成引擎OpenEars】 【查看原文】 【2015-07-07 16:53:07 by beyond】



【自编号:451】【APP内置IM 系统——从入门到千万级在线】 【点击观看】 【2015-07-08 09:47:59 by beyond】



【自编号:453】【iOS_判断程序是否首次运行】
// 判断程序是不是第一次运行
- (BOOL)isAppFirstLauch
{
    // 根据用户上次选择的,展示
    NSString *firstKey = @"userDefault_app_alreadyLaunched";
    NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
    BOOL alreadyLaunched = [userDefault boolForKey:firstKey];
    if (!alreadyLaunched) {
        // 第一次运行
        [userDefault setBool:YES forKey:firstKey];
        [userDefault synchronize];
        return YES;
    }
    return NO;
}

【2015-07-08 10:49:11 by beyond】



【自编号:454】【重要提示:向手机写文件时,虽然读取文件是从mainBundle中读取的,但是:不能写入!!!】【2015-07-08 18:05:19 by beyond】



【自编号:456】【自定义UISlider】 【查看原文】 【2015-07-09 10:06:09 by beyond】



【自编号:457】【singleton】
+ (ModelEngineVoip *)getInstance {
    
    static ModelEngineVoip *gModelEngineVoip = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        gModelEngineVoip = [[self alloc]init];
    });
    
    return gModelEngineVoip;
}
【2015-07-09 16:50:04 by beyond】



【自编号:459】【给顶部图片(固定宽高比)添加约束】
假如:宽高比是2:1
1、先给topImgView添加外部三个约束:顶、左、右零个像素
2、再给topImgView添加内部三个约束:【关键】假如目前是iPhone_3.5_inch
     2.1  先添加约束  固定宽度320、高度160
     2.2  再添加约束  Aspect Ratio
【2015-07-10 10:16:48 by beyond】



【自编号:460】【两个Label约束冲突的解决办法】
使用场景:
联系地址      重庆市大足县国民政局国梁右
                    镇分局民政服务中心大厅102
左边的一个Label1是固定的字数
右边的Label2是动态变化 的字数

1、先给Label1添加距左、距上 10 个点
2、再给Label2添加:距左、距右、距上10个点
3、设置Label2的行数为0(即高度动态变化)
4、【关键】降低左边的Label1 水平 hugging的优先级(从251降低到250),目的是:让左边的Label1在其他的View扩增之前  扩增;
注:水平 hugging的优先级 指的是:箍紧该View的力度,值越大,该View越容易被箍紧
【2015-07-10 10:57:48 by beyond】



【自编号:462】【XCode虽然在某一行抛异常,但是不打印错误信息~~~的解决办法,使用@try @catch @final】
1、先用全局数点 定位到崩掉的那一行
2、用下面代码中的@try把那一行包裹起来,再重新运行
@try {   
SGGirlListCell *cell = [tableView dequeueReusableCellWithIdentifier:  
                             @"SGGirlListCell"];  
}@catch (NSException * e) {
   NSLog(@"Exception: %@", e);   
}@final {
   // 始终都要执行的代码
}
【2015-07-13 09:57:14 by beyond】



【自编号:464】【app上下黑边!!!的解决办法】
工程里面添加一个[email protected]就好了
【2015-07-13 17:20:30 by beyond】



【自编号:466】【遍历约束(没看实践)】
            //遍历footerview约束(一般高,宽)
            NSArray* constrains = self.footerView.constraints;
            for (NSLayoutConstraint* constraint in constrains) {
                if (constraint.firstAttribute == NSLayoutAttributeHeight) {
                    constraint.constant = 0.0;
                }
            }
            
           //遍历view约束,找到属于tableview的约束
            NSArray* constrains2 = self.view.constraints;
            for (NSLayoutConstraint* constraint in constrains2) {
                if (constraint.secondItem == self.tableView) {
                    //据底部0
                    if (constraint.firstAttribute == NSLayoutAttributeBottom) {
                        constraint.constant = 0.0;
                        
                    }
                }
            }
【2015-07-14 13:57:33 by beyond】



【自编号:467】【NSString writeToFile必须提前存在!!!】
Error Domain=NSCocoaErrorDomain Code=4 "The folder “xb_3_1.txt” doesn’t exist." UserInfo=0x100311ae0 {NSFilePath=/Users/beyond/Desktop/xb_3_1.txt, NSUserStringVariant=Folder, NSUnderlyingError=0x100311600 "The operation couldn’t be completed. No such file or directory"}
【2015-07-14 14:52:13 by beyond】



【自编号:468】【创建文件死活不成功,结果发现:路径写错了。。。】
//第一种方法: NSFileManager实例方法读取数据
        NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDesktopDirectory, NSUserDomainMask, YES);
        NSString* thepath = [paths lastObject];
        // (lldb) po thepath        /Users/beyond/Desktop
//Macintosh HD ▸ 用户 ▸ beyond ▸ 桌面
        thepath = [thepath stringByAppendingPathComponent:@"xb_3.txt"];
        NSLog(@"桌面目录:%@", thepath);
        // /Users/beyond/Desktop/z_上.txt
        
        NSFileManager* fm = [NSFileManager defaultManager];
        NSData* data = [[NSData alloc] init];
        data = [fm contentsAtPath:thepath];
        NSString *textStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];//NSASCIIStringEncoding,NSUTF8StringEncoding
        NSLog(@"%@",textStr);
        NSMutableArray *mArr = [textStr componentsSeparatedByString:@"\n"];
        
        NSLog(@"%ld",mArr.count);
        NSMutableArray *arr = [NSMutableArray array];
        int txtName = 1;
        BOOL b;
        // 每三十个一个数组写到一个文件
        for (int i = 0; i0&&i%30==0) {
                // 拼装,写到文件,清空临时数组
                NSString *str = arr[0];
                for (int j = 1; j
【2015-07-14 16:16:47 by beyond】



【自编号:469】【常用键盘类型】
1、金额:Decimal Pad
2、手机:Number Pad
3、身份证:Numbers And Punctuation
【2015-07-14 17:45:31 by beyond】



【自编号:470】【xib连线出问题了,删掉重连】
 setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key xib_xb_3_btn.'
*** First throw call stack:
【2015-07-15 09:40:53 by beyond】



【自编号:471】【打印窗口层次UIWindow keyWindow recursiveDescription】
用xcode启动app,然后点击xcode暂停运行按钮,然后在调试控制台输入下面语句:
po [[UIWindow keyWindow] recursiveDescription]
然后就可以看到完整的UI结构。
【2015-07-16 14:25:01 by beyond】



【自编号:472】【一个iOS开发者的个人博客】 【进入网址】 【2015-07-16 14:26:41 by beyond】



【自编号:473】【通过appdelegate的sendEvent方法,感知用户触摸,发出通知,接收通知,从而实现用户点击任何位置,隐藏一个弹出的view】 【查看原文】 【2015-07-16 14:32:37 by beyond】



【自编号:474】【通过appdelegate的sendEvent方法,感知用户触摸,发出通知,接收通知,从而实现用户点击任何位置,隐藏一个弹出的view】
需求,navigationItem的titleView点击后弹出 选择器的消失(在选择器展开的时候,触摸屏幕任何地方使其消失)。

在UIApplication下有一个sendEvent函数
具体流程是这样:

1.新建一个自定义的UIApplication(MyApplication),并替换系统默认的UIApplication:
在程序入口处(main.m)修改代码,这样程序就会调用我们的自定义Application类

2.在MyApplication中实现sendEvent函数,利用系统通知中心(NSNotificationCenter)发送触摸事件:
-(void)sendEvent:(UIEvent *)event
{
    if (event.type==UIEventTypeTouches) {
        if ([[event.allTouches anyObject] phase]==UITouchPhaseBegan) {
            //响应触摸事件(手指刚刚放上屏幕)
            [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:nScreenTouch object:nil userInfo:[NSDictionary dictionaryWithObject:event forKey:@"data"]]];
            //发送一个名为‘nScreenTouch’(自定义)的事件
        }
    }
    [super sendEvent:event];
}

3.在selectorView的构造函数中注册nScreenTouch事件,并判断该次触摸时间是否由selectorView引发,如果不是,则隐藏selectorView。
- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {

        //注册nScreenTouch事件
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onScreenTouch:) name:nScreenTouch object:nil];

    }
    return self;
}
-(void)dealloc
{
    //移除nScreenTouch事件
    [[NSNotificationCenter defaultCenter] removeObserver:self name:nScreenTouch object:nil];
    [super dealloc];
}
-(void) onScreenTouch:(NSNotification *)notification
{
    UIEvent *event=[notification.userInfo objectForKey:@"data"];
    UITouch *touch=[event.allTouches anyObject];
    if (touch.view!=self) {
        //取到该次touch事件的view,如果不是触摸了selectorView,则隐藏selectorView.
        [UIView animateWithDuration:0.5 animations:^
        {
            self.alpha=0;
        }];
        [UIView commitAnimations];
    }
}
总结

通过sendEvent配合消息中心,可以实现很多看起来挺复杂的功能,而且从解耦的角度,也非常优雅
【查看原文】 【2015-07-16 14:37:20 by beyond】



【自编号:475】【通过appdelegate的sendEvent方法,感知用户触摸,发出通知,接收通知,从而实现用户点击任何位置,隐藏一个弹出的view】
需求,navigationItem的titleView点击后弹出 选择器的消失(在选择器展开的时候,触摸屏幕任何地方使其消失)。

在UIApplication下有一个sendEvent函数
具体流程是这样:

1.新建一个自定义的UIApplication(MyApplication),并替换系统默认的UIApplication:
在程序入口处(main.m)修改代码,这样程序就会调用我们的自定义Application类

2.在MyApplication中实现sendEvent函数,利用系统通知中心(NSNotificationCenter)发送触摸事件:
-(void)sendEvent:(UIEvent *)event
{
    if (event.type==UIEventTypeTouches) {
        if ([[event.allTouches anyObject] phase]==UITouchPhaseBegan) {
            //响应触摸事件(手指刚刚放上屏幕)
            [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:nScreenTouch object:nil userInfo:[NSDictionary dictionaryWithObject:event forKey:@"data"]]];
            //发送一个名为‘nScreenTouch’(自定义)的事件
        }
    }
    [super sendEvent:event];
}

3.在selectorView的构造函数中注册nScreenTouch事件,并判断该次触摸时间是否由selectorView引发,如果不是,则隐藏selectorView。
- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {

        //注册nScreenTouch事件
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onScreenTouch:) name:nScreenTouch object:nil];

    }
    return self;
}
-(void)dealloc
{
    //移除nScreenTouch事件
    [[NSNotificationCenter defaultCenter] removeObserver:self name:nScreenTouch object:nil];
    [super dealloc];
}
-(void) onScreenTouch:(NSNotification *)notification
{
    UIEvent *event=[notification.userInfo objectForKey:@"data"];
    UITouch *touch=[event.allTouches anyObject];
    if (touch.view!=self) {
        //取到该次touch事件的view,如果不是触摸了selectorView,则隐藏selectorView.
        [UIView animateWithDuration:0.5 animations:^
        {
            self.alpha=0;
        }];
        [UIView commitAnimations];
    }
}
总结

通过sendEvent配合消息中心,可以实现很多看起来挺复杂的功能,而且从解耦的角度,也非常优雅
【查看原文】 【2015-07-16 14:37:54 by beyond】



【自编号:476】【XCode调试技巧】 【查看原文】 【2015-07-16 14:49:27 by beyond】



【自编号:477】【全屏蒙板】
@interface Dialog: UIViewController  
{  
    UIWindow *  dialog;  
}  
@end  
  
@implementation Dialog  
  
- (void)show  
{  
    CGRect screenBounds = [[UIScreen mainScreen] bounds];  
    dialog = [[UIWindow alloc] initWithFrame:screenBounds];  
      
    dialog.rootViewController = self;  
      
    [dialog makeKeyAndVisible];  
}  
  
  
-(void)close{  
    // Exit this page.  
  
    [self removeFromParentViewController];  
    [dialog release];  
}  
@end  

【2015-07-16 14:50:15 by beyond】



【自编号:478】【iOS键盘删除键】
string 长度是0  @""
【2015-07-16 14:51:24 by beyond】



【自编号:480】【AutoLayout_变高度Label】
联系地址      重庆市大足县国民政局国梁右
                    镇分局民政服务中心大厅102
右边加约束:
1.与左边Label顶对齐
2.距离右scrollView10
3.距离左scrollView60
行数为0
打完收功
【2015-07-16 16:17:09 by beyond】



【自编号:482】【iOS里面tableView的section顶端粘滞效果】
iOS里面tableView的section顶端粘滞效果是怎么实现的

有两种方法:
1、tableview.tableHeaderView 
2、- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
第一种方法,header的会跟着tableview滚动隐藏,而第二种方法则有你说的那种粘滞效果。
footer一样。
【2015-07-16 18:41:23 by beyond】



【自编号:484】【如果根据\n换行失败,则可以在XCode断点下看到】
</pre>【2015-07-17 10:12:01 by beyond】<hr />【自编号:485】【如果根据\n换行失败,则可以在XCode断点下看到\r换行】【2015-07-17 10:12:19 by beyond】<hr />【自编号:486】【将一个数组用\n连接后,写到文件】<pre name="code" class="objc">// 使用指定的连接符号,连接一个数组,并最后写到一个文件
void connectArr_writeToFullPath(NSArray* arr,NSString *joinStr,NSString *fullOutTxtPath)
{
    NSLog(@"准备连接数组");
    BOOL b;
    // 拼装,写到文件,清空临时数组
    NSString *str = arr[0];
    for (int j = 1; j
【2015-07-17 10:37:48 by beyond】



【自编号:487】【将一个数组用\n连接后,写到文件】
// 使用指定的连接符号,连接一个数组,并最后写到一个文件
void connectArr_writeToFullPath(NSArray* arr,NSString *joinStr,NSString *fullOutTxtPath)
{
    NSLog(@"准备连接数组");
    BOOL b;
    // 拼装,写到文件,清空临时数组
    NSString *str = arr[0];
    for (int j = 1; j < arr.count; j++) {
        str = [NSString stringWithFormat:@"%@%@%@",str,joinStr,arr[j]];
    }
    //    NSString *filePath = [NSString stringWithFormat:@"/Users/beyond/Desktop/xb_3_%d.txt",txtName];
    //查找文件,如果不存在,就创建一个文件;如果 文件路径不对,死活都不会创建成功或写入成功的
    //创建文件管理器
    NSFileManager *fileManager = [NSFileManager defaultManager];
    if (![fileManager fileExistsAtPath:fullOutTxtPath]) {
        b= [fileManager createFileAtPath:fullOutTxtPath contents:nil attributes:nil];
    }
    NSError *err;
    [str writeToFile:fullOutTxtPath atomically:YES encoding:NSUTF8StringEncoding error:&err];
    NSLog(@"%@",err);
    
}
【2015-07-17 10:38:49 by beyond】



【自编号:488】
// 使用指定的连接符号,连接一个数组,并最后写到一个文件
void connectArr_writeToFullPath(NSArray* marr,NSString *joinStr,NSString *fullOutTxtPath)
{
    NSLog(@"准备连接数组");
    BOOL b;
    // 拼装,写到文件,清空临时数组
    NSString *str = marr[0];
    for (int j = 1; j < marr.count; j++) {
        str = [NSString stringWithFormat:@"%@%@%@",str,joinStr,marr[j]];
    }
    //    NSString *filePath = [NSString stringWithFormat:@"/Users/beyond/Desktop/xb_3_%d.txt",txtName];
    //查找文件,如果不存在,就创建一个文件;如果 文件路径不对,死活都不会创建成功或写入成功的
    //创建文件管理器
    NSFileManager *fileManager = [NSFileManager defaultManager];
    if (![fileManager fileExistsAtPath:fullOutTxtPath]) {
        b= [fileManager createFileAtPath:fullOutTxtPath contents:nil attributes:nil];
    }
    NSError *err;
    [str writeToFile:fullOutTxtPath atomically:YES encoding:NSUTF8StringEncoding error:&err];
    NSLog(@"%@",err);
    
}

// 根据文件名,获取桌面上的某个文件的全路径(参数:@"xb_4.txt")
NSString * getDeskFileFullPathByFileName(NSString *fileName)
{
    //第一种方法: NSFileManager实例方法读取数据
    NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDesktopDirectory, NSUserDomainMask, YES);
    NSString* fullPath = [paths lastObject];
    // (lldb) po thepath        /Users/beyond/Desktop
    //                          Macintosh HD ▸ 用户s ▸ beyond ▸ 桌面
    // 附加文件名称(带后缀)
    fullPath = [fullPath stringByAppendingPathComponent:fileName];
    NSLog(@"txt文件全路径:%@", fullPath);   //    /Users/beyond/Desktop/xb_4.txt
    return fullPath;
}
NSString * getStringFromFullPath(NSString *filePath)
{
    NSFileManager* fm = [NSFileManager defaultManager];
    NSData* data = [[NSData alloc] init];
    data = [fm contentsAtPath:filePath];
    NSString *textStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    //NSASCIIStringEncoding,NSUTF8StringEncoding
    // 统一成英文标点
    textStr = [textStr stringByReplacingOccurrencesOfString:@"\r" withString:@"\n"];
    textStr = [textStr stringByReplacingOccurrencesOfString:@"。" withString:@"."];
    textStr = [textStr stringByReplacingOccurrencesOfString:@"," withString:@","];
    textStr = [textStr stringByReplacingOccurrencesOfString:@";" withString:@";"];
    textStr = [textStr stringByReplacingOccurrencesOfString:@"(" withString:@"("];
    textStr = [textStr stringByReplacingOccurrencesOfString:@")" withString:@")"];
    textStr = [textStr stringByReplacingOccurrencesOfString:@"【" withString:@"["];
    textStr = [textStr stringByReplacingOccurrencesOfString:@"】" withString:@"]"];
    NSLog(@"%@",textStr);

    return textStr;
}
// 使用\n分割一个统一格式的,没有课文的,txt文件成N个小文件,(@"N5_N1.txt",30)
void splitFileToLittleFiles(NSString *sourceFileName,int pageCount)
{
    // @"N5_N1.txt"
    // 返回:/Users/beyond/Desktop/N5_N1.txt
    NSString *sourceFileFullPath = getDeskFileFullPathByFileName(sourceFileName);
    NSString *textStr = getStringFromFullPath(sourceFileFullPath);
    
    // 如:N1词汇表,没有分课,统一分行的~
    NSArray *allArr = [textStr componentsSeparatedByString:@"\n"];
    NSLog(@"%ld",allArr.count);
    NSMutableArray *tmpMArray = [NSMutableArray array];
    int txtName = 1;
    // 每pageCount添加到一个数组,再拼接后,写到一个文件
    for (int i = 0; i 0 && i%pageCount == 0) {
            NSString *fileName = [NSString stringWithFormat:@"%@_%d.txt",sourceFileName,txtName++];
            NSString *outFilePath = getDeskFileFullPathByFileName(fileName);
            // 拼装,写到文件,清空临时数组
            connectArr_writeToFullPath(tmpMArray, @"\n", outFilePath);
            [tmpMArray removeAllObjects];
        }
    }
    // 再把最后mArr不够pageCount的剩余的内容,写入文件
    if (tmpMArray.count > 0) {
        NSString *fileName = [NSString stringWithFormat:@"%@_%d.txt",sourceFileName,txtName];
        NSString *outFilePath = getDeskFileFullPathByFileName(fileName);
        connectArr_writeToFullPath(tmpMArray, @"\n",outFilePath);
    }

}



int main(int argc, const char * argv[])
{
    
    @autoreleasepool
    {
        
        // 调用方法,一句话的事,全是针对桌面的哦~
        splitFileToLittleFiles(@"N5_N1.txt",  50);
        return 0;
    }
}


【2015-07-17 11:26:18 by beyond】



【自编号:492】【itunes安装应用】
itunes点击A;拖动ipad进入itunes;itunes点击【手机】;此时会出现【移除】或【添加】
【2015-07-20 18:21:46 by beyond】



你可能感兴趣的:(ios,问题,xcode)