我有一个签名页面,用户可以签名。 然后需要将其保存到NSDictionary,但是我想在TableView中为每个行或单元调用一个键列表作为文本。 这样:
“viewImage =保存为键对象:随机数”
这部分有点容易,难的部分是我在另一个页面上调用它到TableView。 它退出应用程序时出现错误“SIGABRT”。现在我所有的代表都到位并且正在工作......我相信。 现在是一些示例代码:
FirstPage.m
UIImagePNGRepresentation(viewImage);
NSMutableArray *innerArray = [[NSMutableArray array]init];
[innerArray addObject:viewImage];
[SignatureSave setObject:innerArray forKey:@"5599"];
简单够了,但不会给我一个错误。
SecondPage.m
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
FirstPage *appShare = (FirstPage *)[[UIApplication sharedApplication] delegate];
NSArray *dataDuplicate = [[NSArray alloc]init ];
dataDuplicate = [appShare.SignatureSave allKeysForObject:@"innerArray"];
static NSString *CellIdentifier = @"Cell";
NSLog(@"%@",dataDuplicate);
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil)
{
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero]autorelease];
}
if (dataDuplicate != nil) {
cell.textLabel.text = [dataDuplicate objectAtIndex:indexPath.row];
}
else
{
UIAlertView *CellAlert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Error Loading content, Try Again Later." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[CellAlert show];
[CellAlert release];
}
return cell;
}
@end
现在,如何将viewImage
保存到NSDictionary,以便能够在SecondPage
上调用它并在TableVIew中显示对象的名称?
答案 0 :(得分:3)
我真的不明白你的问题究竟是什么。
首先,是您的字典是保留对象吗?
//FirstPage.h
@property (nonatomic, retain) NSDictionary *SignatureSave;
//FirstPage.m
@synthesize SignatureSave;
…
UIImagePNGRepresentation(viewImage);
NSMutableArray *innerArray = [NSMutableArray array]; // using "array" is equivalent to alloc-init-autorelease
[innerArray addObject:viewImage];
[self.SignatureSave setObject:innerArray forKey:@"5599"];
// OR setting the array directly:
UIImagePNGRepresentation(viewImage);
NSArray *innerArray = [NSArray arrayWithObject:viewImage];
[self.SignatureSave setObject:innerArray forKey:@"5599"];
// OR even setting the image directly to the dictionary:
UIImagePNGRepresentation(viewImage);
[self.SignatureSave setObject:viewImage forKey:@"5599"];
现在,如果您通过在前面写self.
来访问该对象,它将调用retain,您的对象将保持活动状态。否则,它将在方法结束时自动释放。这将解决您的字典在创建表视图时可能不存在/不可用的问题,并且您不必使用单例。
您要使用此代码访问的内容是什么?
FirstPage *appShare = (FirstPage *)[[UIApplication sharedApplication] delegate];
[[UIApplication sharedApplication] delegate]
您获得了应用程序委托(显然)。这些是MyAppNameAppDelegate
个文件,但您将其视为FirstPage
类
只需NSLog()
来检查您是否得到了正确的课程,即您期望的课程。
NSLog(@"%@", [[[UIApplication sharedApplication] delegate] class]);
这里有潜在的泄漏,你可以使用alloc-init但是永远不会释放它:
NSArray *dataDuplicate = [[NSArray alloc]init ];
dataDuplicate = [appShare.SignatureSave allKeysForObject:@"innerArray"];
此外,您可以简化它(将自动释放):
NSArray *dataDuplicate = [appShare.SignatureSave allKeysForObject:@"innerArray"];
这里有另一个问题。
为什么要调用对象@"innerArray"
的所有键?
你没有这样的对象,而且在更多情况下它是错误的。 innerArray
是您之前在FirstPage.m
中命名的数组,但只有您作为开发人员才能更好地记住变量。编译后,无论如何都会有一个神秘的名字。如果您愿意,可以访问密钥@"5599"
,但我认为您不想这样做。在您的情况下,您想要访问字典的所有键,所以只需调用:
NSArray *dataDuplicate = [appShare.SignatureSave allKeys];
现在您将拥有一个包含字典所有键的数组,您可以像使用objectAtIndex:
一样访问它们。
NSString *keyName = [dataDuplicate objectAtIndex:indexPath.row];
cell.textLabel.text = keyName;
id theObject = [appShare.SignatureSave objectForKey:keyName]; // for example the image
告诉我这是否可以解决您的问题或告诉我我是如何误解您的问题的。
答案 1 :(得分:-4)
我发现这个问题的答案实际上很简单,
我最终使用Singleton方法而不是全局变量方法。
现在,Singleton方法看起来很可怕,但它的退出简单,See here.
我从单身方法注意到全局方法的主要区别是, 全局方法需要大量转换和重新转换。 虽然Singleton方法在许多页面或类上使用单个对象。
现在我希望将来能更好地帮助人们!