为啥我的栏按钮消失了?我的头衔没有改变?并且出现了一个不存在的表格视图?

Posted

技术标签:

【中文标题】为啥我的栏按钮消失了?我的头衔没有改变?并且出现了一个不存在的表格视图?【英文标题】:Why did my bar buttons disappear? And my title didn't change? And a non-existent tableview appears?为什么我的栏按钮消失了?我的头衔没有改变?并且出现了一个不存在的表格视图? 【发布时间】:2014-01-02 06:10:06 【问题描述】:

我正在制作一个包含 MagicalRecord 和 Core Data 的简单的 ios 小应用程序。但我对故事板和应用程序之间的差异感到困惑。我的两个条形按钮(状态和 +)没有按预期显示。无论我在视图标题中输入什么内容,它总是显示为“Home”(这是原始文本)。另外,我最初有一个 tableview,但删除了它。尽管如此,它仍然出现,略微歪斜,如随附的屏幕截图所示。

我会提到另一个可能的线索。我不明白它为什么在那里,也不明白它是如何导致这个问题的。事实上,我打算把它作为一个单独的问题。我在这里提到它只是因为它是一个更有经验的开发人员可能会认为是可疑的谜。在这里,从控制台:

2014-01-01 22:37:50.691 WMLG1[32260:a0b] CoreData: warning: no NSValueTransformer with class name 'ImageToDataTransformer' was found for attribute 'image' on entity 'Image'
2014-01-01 22:37:50.693 WMLG1[32260:a0b] CoreData: warning: no NSValueTransformer with class name 'ImageToDataTransformer' was found for attribute 'thumbnailImage' on entity 'Recipe'
2014-01-01 22:37:50.724 WMLG1[32260:a0b] +[NSManagedObjectContext(MagicalRecord) MR_contextWithStoreCoordinator:](0x2f30ac) -> Created Context UNNAMED
2014-01-01 22:37:50.724 WMLG1[32260:a0b] +[NSManagedObjectContext(MagicalRecord) MR_setRootSavingContext:](0x2f30ac) Set Root Saving Context: <NSManagedObjectContext: 0x8a47b60>
2014-01-01 22:37:50.726 WMLG1[32260:a0b] +[NSManagedObjectContext(MagicalRecord) MR_newMainQueueContext](0x2f30ac) Created Main Queue Context: <NSManagedObjectContext: 0x8a481b0>
2014-01-01 22:37:50.727 WMLG1[32260:a0b] +[NSManagedObjectContext(MagicalRecord) MR_setDefaultContext:](0x2f30ac) Set Default Context: <NSManagedObjectContext: 0x8a481b0>*

这对我来说很神秘的原因是我的模型中没有名为“Image”或“Recipe”的实体。

我很年轻,所以一切皆有可能,尽管我非常小心并且觉得我对代码掌握得很好(尽管我相信可能存在一些冗余)。有人可以指出我做错了什么吗?

以下是 HomeViewController 中的相关代码:

//
//  HomeViewController.m
//  WMLG1
//
//  Created by Tim Jones on 1/1/14.
//  Copyright (c) 2014 TDJ. All rights reserved.
//


#import "HomeViewController.h"
#import "ListActivity.h"

@interface HomeViewController ()

    NSFetchedResultsController * frc;


@end

@implementation HomeViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) 
        // Custom initialization
    
    return self;


- (void)viewDidLoad

    [super viewDidLoad];
    // Do any additional setup after loading the view.


- (void)didReceiveMemoryWarning

    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.


#pragma mark Table View stuff


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

    frc = [ListActivity MR_fetchAllGroupedBy:@"category" withPredicate:nil sortedBy:@"name" ascending:NO];
    return [[frc sections ]count];


- (NSInteger)sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)sectionIndex

    frc = [ListActivity MR_fetchAllGroupedBy:@"category" withPredicate:nil sortedBy:@"name" ascending:NO];
    return [frc sectionForSectionIndexTitle:@"category" atIndex:sectionIndex];


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

    frc = [ListActivity MR_fetchAllGroupedBy:@"category" withPredicate:nil sortedBy:@"name" ascending:NO];
    NSInteger count = 0;
    NSInteger realNumberOfSections = [frc.sections count];
    if (section < realNumberOfSections)
    
        // fetchedResultsController has this section
        id <NSFetchedResultsSectionInfo> sectionInfo = [frc.sections objectAtIndex:section];
        count = [sectionInfo numberOfObjects];
    
    else
    
        // section not present in fetchedResultsController
        count = 0; // for empty section, or 1 if you want to show a "no objects" cell.
    
    return count;

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

    frc = [ListActivity MR_fetchAllGroupedBy:@"category" withPredicate:nil sortedBy:@"name" ascending:NO];
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];


    // Check if a reusable cell object was dequeued
    if (cell == nil) 
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    

    // Populate the cell with the appropriate name based on the indexPath
    cell.textLabel.text = [frc.sections objectAtIndex:indexPath];

    return cell;



#pragma mark Table View Delegate stuff

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath




@end

【问题讨论】:

确保您在情节提要中分配了正确的 viewcontroller name 感谢@Chancy 的编辑!不知道你是怎么做到的,但它干净多了。 @TimJones 哈哈,你可以查看this 来查看如何进行一些格式化。 @Viruss--我刚刚检查过,我的两个视图控制器都分配了正确的自定义类。 【参考方案1】:

从模拟器中删除应用程序,方法是从屏幕顶部的栏中选择“硬件”,然后选择“主页”。单击并按住您的应用程序图标,直到出现一个小“X”,然后单击它以删除该应用程序。在 Xcode 中,转到顶部的“产品”,然后单击“清理”。然后尝试再次在模拟器上运行应用程序。

主视图控制器是您的初始视图控制器吗?

您在 Home View Controller 中实现了 UITableView 控制方法,但询问是否显示了 UITableView。该控制器应该是 UITableViewController 还是只是一个委托?

【讨论】:

@mike--我会听从你的建议(早上 - 我已经完成了晚上的工作),但实际上我已经尝试了你推荐的两种方法。对不起,我应该提到这一点。另外,是的,HomeViewController 是我的表视图委托。我会在早上回来报告。谢谢! 好的,由于@Mike 的建议,事情似乎运行正常。如前所述,我之前尝试过这两种修复方法,但今天早上它们起作用了。为了让我的导航栏按钮显示出来,我仍然必须删除并替换下一个屏幕的导航控制器。我不记得 Xcode/simulator 以前对我做过这种事情。非常感谢!会投票赞成答案,但没有代表。 :( 太好了,很高兴听到它已修复。我很少遇到这种问题,我不确定是什么原因造成的。您可以接受答案,因此问题被视为已解决。 :) 完成了,@Mike,再次感谢!再找我——我是一个热情的菜鸟,问题多于答案。 :)

以上是关于为啥我的栏按钮消失了?我的头衔没有改变?并且出现了一个不存在的表格视图?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的完成按钮在一个简单的 FlipsideViewController 应用程序中消失了?

为啥我的 UI 元素在执行 paint(); 后消失了?

Qt 5.7 QML 为啥我的 CheckBox 属性绑定消失了?

当我添加一个按钮时,为啥动态文本会消失?

工具栏中的栏按钮方法未调用

为啥我的 UIPageViewController 中的页面没有改变?