【自编号: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】