使用文本字段另存为功能

Posted

技术标签:

【中文标题】使用文本字段另存为功能【英文标题】:Save as feature using textfields 【发布时间】:2013-12-06 23:57:44 【问题描述】:

在我的应用程序中,文本字段位于不同的视图中,它们都是一个数组的一部分,但有几个数组具有不同的文本字段值。例如,在一个数组的第一个文本字段中可能有 2,在第二个文本字段中可能有 5,但在另一个数组中的第一个文本字段中可能有 6,在第二个文本字段中可能有 4。当您单击 saveAs 按钮时,它将带您到 NameSaveAsView 那里有另一个文本字段。此文本字段将为该数组指定一个名称,这样当您进入 OpenShiftView 时,您会在 tableview 单元格中看到每个名称,并且可以加载您想要的数组。这是到目前为止我认为应该可以工作的代码,但是每当我测试它时,它都可以正常工作,除了 OpenShiftView 只是加载了空单元格。我的代码有什么问题?感谢您的帮助。

//
//  NameSaveAsViewController.m
//  ShiftCalculator
//
//  Created by John on 21/11/2013.
//  Copyright (c) 2013 John. All rights reserved.
//

#import "NameSaveAsViewController.h"

@implementation NameSaveAsViewController
@synthesize saveAsText, normalWage, overtimeWage, mondayNormalTime, mondayOverTime,   
tuesdayNormalTime, tuesdayOverTime, wednesdayNormalTime, wednesdayOverTime, 
thursdayNormalTime, thursdayOverTime, fridayNormalTime, fridayOverTime,   
saturdayNormalTime, saturdayOverTime, sundayNormalTime, sundayOverTime, bonusMoney,  
tArray, string5, mArray;


-(void)viewDidLoad 

[super viewDidLoad];

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self   
action:@selector(dismissKeyboard:)];
[self.view addGestureRecognizer:tap];






- (void)dismissKeyboard:(id)sender

if ([saveAsText isEditing]) 
    [saveAsText resignFirstResponder];



- (void)textFieldDidEndEditing:(UITextField *)textField 
saveAsText.placeholder = @"Shift Name";
NSString *string5 = saveAsText.text;



- (void)saveAs:(id)sender

[mArray addObject:string5];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:mArray forKey:@"saveArray"];

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[defaults setObject:strings forKey:@"saveArray2"];
 
 @end

//
//  OpenShiftViewController.m
//  ShiftCalculator
//
//  Created by John on 21/11/2013.
//  Copyright (c) 2013 John. All rights reserved.
//

#import "OpenShiftViewController.h"


@implementation OpenShiftViewController
@synthesize textFields, arr, myMutableArray, myDictionary, defaults;

- (void)viewDidLoad

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
myDictionary = [defaults dictionaryRepresentation];
self.arr = [defaults arrayForKey:@"saveArray"];



-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView


return 1;


-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

return arr.count;


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath    
*)indexPath


static NSString *CellIdentifier = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell) 
    cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle    
reuseIdentifier:CellIdentifier];



cell.textLabel.text = [arr objectAtIndex:indexPath.row];


return cell;

@end

【问题讨论】:

我真的无法理解你想要达到的目标 如果没有看到 OpenShiftViewController 的头文件就无法判断,但看起来您正在声明一个局部变量 arr 屏蔽一个实例变量,也称为 arr。如果您将-viewDidLoad 中的行更改为self.arr = [defaults arrayForKey:@"saveArray"]; 会发生什么另外您将相同的值分配给同一单元格中的两个标签,这看起来很奇怪,viewDidLoad 的结尾显然未完成,因为它调用了一个空方法 我基本上是在尝试使用文本字段创建另存为功能。 【参考方案1】:

你需要弄清楚局部变量的概念。您在 viewDidLoad 中定义的“arr”和 textFieldDidEndEditing 中的“mArray”仅存在于这些方法中。您似乎还有其他与实例变量同名的变量,但它们并不相同。

总的来说,这些问题几乎肯定是造成您所看到的症状的原因。尝试使用您的实例变量而不是创建本地变量。

【讨论】:

如果你用新代码更新你的问题,也许有人会弄清楚还有什么问题。 您仍在创建掩盖实例变量的局部变量。在新代码中,它是NSString *string5 = saveAsText.text;。这与您在 saveAs: 方法中使用的 string5 不同。

以上是关于使用文本字段另存为功能的主要内容,如果未能解决你的问题,请参考以下文章

求问怎么用VC++设计一个文本文件编辑器应具备打开、存盘、另存为等功能

另存为文本文件 javascript

将 JTextPane 上标文本另存为 RTF

Excel VBA 使用单元格文本作为文件名在当前目录中另存为

php查询输出另存为文本文件

excel另存为csv打开后有大量逗号是怎么回事?