Iphone 是否从Plist设置UILabel文本?

Iphone 是否从Plist设置UILabel文本?,iphone,objective-c,xcode,plist,Iphone,Objective C,Xcode,Plist,我成功地将plist数组和字典加载到表中。我正在尝试在练习的详细视图中将exerciseName值设置为UILabel <array> <dict> <key>exercises</key> <array> <dict> <key>exerciseDetail</key> <string></string

我成功地将plist数组和字典加载到表中。我正在尝试在练习的详细视图中将exerciseName值设置为UILabel

<array>
<dict>
    <key>exercises</key>
    <array>
        <dict>
            <key>exerciseDetail</key>
            <string></string>
            <key>exerciseName</key>
            <string>Ab Crunch Machine</string>
        </dict>
        <dict>
            <key>exerciseDetail</key>
            <string></string>
            <key>exerciseName</key>
            <string>Ab Roller</string>
        </dict>
    </array>
    <key>muscleName</key>
    <string>Abdominals</string>
</dict>
编辑:

对于我的exerciseViewController DIDSelectIndexExtraw,我有:

NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
    [def setObject:exerciseArray forKey:@"exercises"];
    [def setValue:[NSString stringWithFormat:@"%d",indexPath.row] forKey:@"exercises"];
对于ViewDidLoad for detailViewController,我有: exerciseDetailView的viewDidLoad

 self.navigationItem.title = @"Exercise Detail"; 

NSMutableArray *exerciseDetailArray = [[[NSUserDefaults alloc] objectForKey:@"exercises"] mutableCopy];

int indexValue = [[[NSUserDefaults alloc] valueForKey:@"exercises"] intValue];

name.text =[[exerciseDetailArray objectAtIndex:indexValue] objectForKey:@"exerciseName"];
控制台输出:

2011-03-19 22:52:08.279 Curl[32300:207] exercisedetalarray: (
    {
    exerciseDetail = "";
    exerciseName = "Ab Crunch Machine";
},
    {
    exerciseDetail = "";
    exerciseName = "Ab Roller";
},
    {
    exerciseDetail = "";
    exerciseName = "Advanced Kettlebell Windmill";
},
    {
    exerciseName = "Air Bike";
},
    {
    exerciseName = "Alternate Heel Touchers";
},
    {
    exerciseName = "Barbell Ab Rollout";
},
    {
    exerciseName = "Barbell Side Bend";
},
    {
    exerciseName = "Bent Press";
},
    {
    exerciseName = "Bent-Knee Hip Raise";
},
    {
    exerciseName = "Butt-Ups";
},
    {
    exerciseName = "Cable Crunch";
}
)

使用MaserView NSDefault代码进行编辑:

NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
[def setObject:exerciseArray forKey:@"InfoArray"];
[def setValue:[NSString stringWithFormat:@"%d",indexPath.row] forKey:@"indexVal"];
使用detailView进行编辑NSUserDefaults代码:

-(void)viewWillAppear:(BOOL)animated
{    
    NSMutableArray *exerciseDetailArray = [[[NSUserDefaults alloc] objectForKey:@"InfoArray"] mutableCopy];

    int indexValue = [[[NSUserDefaults alloc] valueForKey:@"indexVal"] intValue];

    name.text =[[exerciseDetailArray objectAtIndex:indexValue] objectForKey:@"exerciseName"];
}
@费萨尔:

查看您的代码,我假设您的标签位于tableView下,因为您正在使用
indexPath.row
对数组进行索引

你的想法看起来是正确的

第1步:

将数据从plist检索到数组中(plist->Array

假设您的plist名称为
Exercise.plist
,则可以使用以下代码将数据检索到plist中

NSString* plistPath = [[NSBundle mainBundle] pathForResource:@"Exercise" ofType:@"plist"];
exerciseArray = [NSArray arrayWithContentsOfFile:plistPath];
第二步:

将数据从数组中获取到标签文本中(数组->标签文本

然后使用下面的代码从数组值设置UILabel的文本

label.text =[[exerciseArray objectAtIndex:indexPath.row]objectForKey:@"exercises"];
注意:

要在masterView和detailView之间使用相同的数组,可以在masterView中的
didSelectRowAtIndexPath
上的NSUserDefaults中设置数组,并在detailView中检索相同的数组

可以使用以下代码执行此操作:

在主视图中的
didselectrowatinexpath
方法:

NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
[def setObject:exerciseArray forKey:@"InfoArray"];
[def setValue:[NSString stringWithFormat:@"%d",indexPath.row] forKey:@"indexVal"];
您可以使用以下代码在detailView中检索该数组:

NSMutableArray *exerciseDetailArray = [[[NSUserDefaults standardUserDefaults] objectForKey:@"InfoArray"] mutableCopy];

int indexValue = [[[NSUserDefaults standardUserDefaults] valueForKey:@"indexVal"] intValue];

label.text =[[exerciseDetailArray objectAtIndex:indexValue] objectForKey:@"exercises"]; 

希望这对你有帮助:)

最终编辑:

SpecificExecuteStableViewController.m中,将您的
DIDSelectRowatingIndexPath:
方法替换为以下方法

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Navigation logic may go here. Create and push another view controller.

     DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
     detailViewController.exerciseArray = [[self.exerciseArray objectAtIndex:indexPath.row]objectForKey:@"exercises"];
     // Pass the selected object to the new view controller.


    NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
    [def setObject:exerciseArray forKey:@"InfoArray"];
    [def setValue:[NSString stringWithFormat:@"%d",indexPath.row] forKey:@"indexVal"];
    NSLog(@"Index inexpath:%d",indexPath.row);
    int indexValue = [[[NSUserDefaults standardUserDefaults] valueForKey:@"indexVal"] intValue];
    NSLog(@"index value master view: %d",indexValue);

    [self.navigationController pushViewController:detailViewController animated:YES];
    [detailViewController release];

}

这肯定会起作用:)

ahh实际上忘了提到exercise detail视图nib中没有表。这就是index.row在此类中不起作用的原因。nib只是一个带有ui标签和图片的黑色视图。因此,我认为我需要避免使用任何提及index.row的内容。是的,在这种情况下,您甚至可以使用
NSUserDefaults
将indexath.row从masterView传递到detailView,传递的方式与我为数组显示的方式相同。@Faisal:我已经编辑了我的答案。因此,请了解如何使用NSUserDefaults将索引和数组从masterView传递到detailView,然后使用特定的
indexValue
将数据检索到detailView中。希望这对你有帮助。好的,谢谢。它应该是
label.text=[[exerciseDetailArray objectAtIndex:indexValue]objectForKey:@“exerciseName”]@Faisal:是的,这就是你的detailView所需要的。对不起,这只是我的一个错误。
NSMutableArray *exerciseDetailArray = [[[NSUserDefaults standardUserDefaults] objectForKey:@"InfoArray"] mutableCopy];

int indexValue = [[[NSUserDefaults standardUserDefaults] valueForKey:@"indexVal"] intValue];

label.text =[[exerciseDetailArray objectAtIndex:indexValue] objectForKey:@"exercises"]; 
NSArray *exerciseDetailArray = [[NSArray alloc] initWithContentsOfArray:[[NSUserDefaults alloc] objectForKey:@"InfoArray"]];

int indexValue = [[[NSUserDefaults standardUserDefaults] valueForKey:@"indexVal"] intValue];

label.text =[[exerciseDetailArray objectAtIndex:indexValue] objectForKey:@"exercises"]; 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Navigation logic may go here. Create and push another view controller.

     DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
     detailViewController.exerciseArray = [[self.exerciseArray objectAtIndex:indexPath.row]objectForKey:@"exercises"];
     // Pass the selected object to the new view controller.


    NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
    [def setObject:exerciseArray forKey:@"InfoArray"];
    [def setValue:[NSString stringWithFormat:@"%d",indexPath.row] forKey:@"indexVal"];
    NSLog(@"Index inexpath:%d",indexPath.row);
    int indexValue = [[[NSUserDefaults standardUserDefaults] valueForKey:@"indexVal"] intValue];
    NSLog(@"index value master view: %d",indexValue);

    [self.navigationController pushViewController:detailViewController animated:YES];
    [detailViewController release];

}