问题标签 [cs193p]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
8 回答
4119 浏览

objective-c - UIViewController 在 prepareForSegue 上抛出无法识别的选择器异常

我正在尝试跟随斯坦福 CS193p iOS 编程讲座。其中一个名为“Happiness”的演示程序创建了两个 UIViewController,一个“PsychViewController”和一个“HappinessViewController”。它使用目标操作方法从 PsychViewController 到 HappinessViewController。

以下代码不断抛出此异常:“-[UIViewController setHappiness:]: unrecognized selector sent to instance”

这是有问题的代码:

我搜索了这个站点和其他站点,通常出现此错误时,这是​​因为通用 UIViewController 没有正确设置为程序中使用的特定视图控制器对象,在本例中为“HappinessViewController”。但是我已经使用 IB 中的身份检查器将通用 UIViewController 设置为 HappinessViewController,但我仍然遇到异常。我正在撕扯我的头发,如果有人可以提供帮助,将不胜感激。

0 投票
1 回答
481 浏览

ios - 为什么 Paul Hegarty 说不要更改 NSFetchedResultsController @properties?

概述:

斯坦福 iOS 教程包含一个实现(标题 + 实现文件),以帮助在使用核心数据时使用表格视图。

链接- http://www.stanford.edu/class/cs193p/cgi-bin/drupal/downloads-2011-fall

文件名- CoreDataTableViewController.zip
CoreDataTableViewController.h包含以下文本:

// 请记住,一旦创建了 NSFetchedResultsController,就不能修改它的 @propertys。如果您想要新的获取参数(谓词、排序等),请创建一个新的 NSFetchedResultsController 并再次设置该类的 fetchedResultsController @property。

问题

这听起来有点奇怪,因为在文档中他们提到了您更改属性时的情况,并在这种情况下推荐了一些东西......看起来像是一些错误,或者我错过了一些东西。如果我只是更改谓词并再次获取,一切正常......

0 投票
1 回答
169 浏览

objective-c - 目标C:下载线程不影响UI,甚至可能吗?

我正在通过 ItunesU 上的斯坦福课程,他们说下载内容的线程不应该对 UI 做任何事情,这应该只发生在主线程上。

好吧,在我的示例中,我正在从 Flicker 下载一张图片,并且我想将这张图片(通过 segue)设置在UIScrollView. 因此,当我在“侧面”线程中下载这张图片时,我正在设置图像的图像属性UIScrollview等。但这显然不起作用,因为我还不知道图像大小,我也不知道对该图像对象的引用尚未正确设置?

那你怎么处理呢?我希望我很清楚..这是我的例子:

和我的照片查看器:

0 投票
1 回答
366 浏览

computer-science - 斯坦福 CS 193P 的新 XCode 存在问题

我正在学习斯坦福大学 2011 年的 CS 193P 课程,但大部分代码都不起作用。当我更新到新的 XCode 时,我编写的所有按钮都没有工作,并且今天尝试实现滚动视图很有趣。有什么办法可以恢复到旧的 XCode 或我应该知道的一些解决方法,这样我至少可以跟着课程学习?

0 投票
1 回答
1546 浏览

ios - iOS (cs193p):为什么我的 UISplitViewControllerDelegate 委托方法没有在方向更改时调用?

我正在关注 iTunes 上很棒的斯坦福 cs193p 课程,现在我正在参加第 7 课和第 3 课。

我只是想让 SplitViewController 在 iPad 上正常工作......但看起来我的 UISplitViewControllerDelegate 委托方法在设备方向发生变化时没有被调用。

这是我到目前为止得到的:

-我创建了一个全新的 iPad 故事板,添加了一个 SplitViewController,其中一个 UIViewController 作为 Master(CalculatorViewController),另一个 UIViewController 作为 Detail(GraphViewController)。我认为我做的一切都是正确的。

-我的 GraphViewController.h 实现了 UISplitViewControllerDelegate 协议:

-My GraphViewController.m 将 SplitViewController 委托设置为自身:

-My GraphViewController.m 实现了必要的方法:

-My GraphViewController.m 支持所有方向:

现在,当我运行应用程序(Snow Leopard 上的 Xcode 4.2、iOS 5.0、iPad Simulator 5.0)时,调用 splitViewController:willHideViewController:withBarButtonItem:forPopoverController: 方法,我的主视图被隐藏,并且在我的详细视图中显示一个按钮在 PopOver 中显示主视图(因为我处于纵向模式)。

但是,当我更改设备的方向(到横向模式......仍在使用模拟器)时,没有任何反应,上述方法都不会再次被调用。我最终仍然隐藏了主视图并且仍然显示了 PopOver 按钮,而事实上,我希望显示主视图并隐藏 PopOver 按钮。

我究竟做错了什么?这是我的代码、Xcode 和模拟器的问题吗?

0 投票
1 回答
124 浏览

grand-central-dispatch - 在不同的调度队列上异步调度时任务如何同步?(快门示例)

在 Lecture 10, Fall 2011 中介绍的 Shutterbug 示例代码中,照片被下载,然后使用以下代码更新到表格视图控制器中:

照片获取活动在 flickr 下载器队列上异步分派,而表视图更新代码(UIKit 功能)在 main_queue 上异步分派,如课堂中所述。

我不明白的是确保 main_queue 上的表视图更新代码直到照片获取活动完成后才执行的机制。在代码块中,队列是串行调度的,但我不知道系统是如何知道的在照片下载完成之前不要在 main_queue 上执行任务。如果这没有发生,如果 main_queue 任务在照片下载完成之前运行,self.photos 将为 nil。

0 投票
1 回答
1537 浏览

iphone - 尝试在 iOS 设备上运行应用程序时出现 Xcode 配置文件问题

我正在关注 iTunes U 上优秀的斯坦福 CS193P 课程(2011 年秋季):http:
//www.stanford.edu/class/cs193p/cgi-bin/drupal/downloads-2011-fall

我正在尝试在带有 iOS 4.3.3 的 iPhone 3GS 上从带有 iOS 5 的 Xcode 4.2 运行我的应用程序(计算器)

我遵循了这些说明: http:
//www.stanford.edu/class/cs193p/cgi-bin/drupal/system/files/lectures/Developing%20on%20Devices.pdf

我能够毫无问题地获得我的开发人员证书。

我去了 iOS 开发中心并创建了一个配置文件。我在表单字段中输入了这个:

  • 个人资料名称:我输入了“计算器”(有关系吗?)
  • 证书:我选择了我的名字(唯一的选择,因为我只创建了一个开发者证书)
  • 应用 ID:我选择了“计算器”(唯一的选项,因为我只创建了一个应用 ID)
  • 设备:我选择了我的设备(唯一的选项,因为我只创建了一个设备)

我很确定我为我的证书和我的设备做了正确的事情。

对于 App Id,我有点困惑。

  • 描述:我输入了“计算器”(再次,这有关系吗?)
  • Bundle Seed Id (App ID Prefix): 显示“Your Team Id xxxxxxx will be used as you App Id Prefix”(我无法更改)
  • Bundle Identifier(App ID 后缀):我输入了“com.myname.calculator”

应该为一个应用程序(为我制作的每个应用程序创建一个新的应用程序)还是为一个开发人员(为我制作的所有应用程序只创建一个)创建一个配置文件?

当我最终完成我的配置文件时,我将它导入到 Organizer(在 Xcode 中)并插入我的 iPhone 并单击“用于开发”。我以为我已经完成了!

但是,当我尝试使用连接的设备在 Xcode 中运行我的应用程序时,我收到以下错误消息:

没有提供兼容 iOS 版本的预置 iOS 设备。将 iOS 设备与最新版本的 iOS 连接以运行您的应用程序或选择 iOS 模拟器作为目标。

是因为我的配置文件有问题吗?我四处搜索,我在 Code Signing Identity 和 .plist 中的设置似乎没问题。

还是因为我的 iPhone 有 iOS 4.3.3 而我正在尝试使用 iOS 5.0 进行开发?这是我认为可能是问题的第一件事,所以我说,让我们升级到 5.0。但是,似乎我只能将我的 iPhone 升级到 iOS 6.01,我不想导致 iTunes U 课程针对的是 iOS 5.0,而且我知道有些东西肯定行不通。有没有办法只将我的 iPhone 升级到 iOS 5.0?

现在我正试图找出问题实际上出在哪里......我的配置文件或我的 iPhone 设备?

编辑#1:

我从头开始使用一个全新的应用程序(我创建了一个单视图应用程序,在视图中添加了标签“Hello World!”......仅此而已)。然后,我按照以下方法从头开始创建了另一个配置文件:http:
//mobile.tutsplus.com/tutorials/iphone/iphone-sdk-install-apps-on-iphone-devices-for-development/

我仍然有同样的错误信息。

然后我进入新项目的构建设置,将 iOS 部署目标从 iOS 5.0 更改为 iOS 4.3……然后我的应用程序在我的设备上启动了!但是,应用程序没有显示我的“Hello World!” 标签。

所以看起来我在做正确的事情......但我的设备 iOS 太旧了。我想将它升级到 iOS 5.0 但不是 iOS 6.01... 可以吗?

编辑#2:

我将我的 iPhone 3GS 升级到 iOS 6.01,当我点击 Organizer 中的“用于开发”按钮时,我收到了以下错误消息:

“我的 iPhone”上的 iOS 版本不匹配任何支持使用此 iOS SDK 安装进行开发的 iOS 版本。请将设备恢复到以下列出的操作系统版本,或更新到最新版本的 iOS SDK;可在此处获得。

安装在 Gaston Vachon 的 iPhone
6.0.1 (10A523)上的操作系统

Xcode 支持的 iOS 版本 最新
5.0 (9A334)
4.3
4.2 (8C134)
4.2

现在我必须将我的 Xcode 升级到最新版本(4.5.2),但我不能,因为我使用的是 Snow Leopard。所以我必须将我的 Mac OS 升级到 Lion 或 Mountain Lion,然后将 Xcode 升级到 4.5.2 (iOS 6.01),然后它可能会工作。但是,由于我正在学习使用 Xcode 4.2 和 iOS 5.0 完成的 iTunes U 课程,我宁愿等到完成本课程后再进行这些升级。

我想我赢不了!

0 投票
1 回答
311 浏览

ios - iOS (cs193p):使用 MapViewController 中的委托以使用来自另一个控制器的不同线程获取图像的问题

我正在关注关于 iOS 5.0 开发的优秀 CS193P 讲座:http:
//www.stanford.edu/class/cs193p/cgi-bin/drupal/

我现在在分配#5,要求的任务#5b。当我单击地图上的注释时,我需要在其中显示带有缩略图的标注。

我设法用以下代码(使用 Flickr)毫无问题地做到了这一点。

MapViewController.h:

MapViewController.m:

PhotoListTableViewController.m:

我在 MapViewController 的 mapView:didSelectAnnotationView: 方法中使用一个委托来从另一个控制器 PhotoListTableViewController 检索图像(以确保我有一个通用的 MapViewController)。

它工作正常......但我需要修改此代码以在另一个线程中调用 Flickr。所以我为此修改了 mapViewController:imageForAnnotation: 方法:

但是,使用此代码时,不会显示缩略图。我知道这是因为当方法“返回图像”时,图像仍然为零导致 downloadQueue 线程尚未完成。我试图像这样在块内“返回图像”:

但编译器不喜欢这样:

将“UIImage *(^)(void)”传递给“disptach_block_t”类型参数的不兼容块指针类型(又名“void (^)(void)”)

我知道块开头的^{表示无效,但是可以将其更改为返回UIImage吗?还是我从一开始就做错了?

我只是不知道如何将 PhotoListTableViewController 中的图像返回给 MapViewController。这应该怎么做?

0 投票
1 回答
1001 浏览

ios - UIActivityIndi​​catorView 从不动画

我有一PhotoViewController堂课@property UIActivityIndicatorView* spinnerFlickrPhotoViewControllerPhotoViewController从 Flickr 下载照片并告诉微调器何时开始和停止动画的子类。每次为视图控制器提供 Flickr 照片时都会调用“updatePhoto”:

上述方法正是我在下载表格内容时在表格视图控制器中显示旋转轮的方法,并且它始终在那里工作。

updatePhoto如果存在,您会在我打印一条消息的开头注意到UIActivityIndicatorViewawakeFromNib我在、viewDidLoad和中放置了类似的声明viewWillAppear。当我运行它时,这是我得到的确切输出:

为什么不spinner存在于awakeFromNib?文档指出“当一个对象收到一个 awakeFromNib 消息时,它保证已经建立了它的所有出口和动作连接。” IBOutlet 可以在它连接的对象不存在的情况下连接吗?在这种情况下, IBOutlet 是否可以在不分配的情况下spinner连接到情节提要?spinner

除此之外,我覆盖了 getterspinner以便它在不存在时实例化。结果,打印输出现在如下所示:

这是我之前期望看到的。尽管如此,我仍然没有得到任何动画。

我已经排除的可能问题:

  • 微调器与背景颜色相同,使其不可见。在我的项目中,背景是黑色的,微调器是白色的。
  • 我正在尝试制作动画,UIActivityIndicatorView 而一些昂贵的方法正在阻塞主线程。在我的项目中,我所有的文件系统 I/O 和下载方法都在非主dispatch_async队列中调用。
  • 微调器的IBOutlet 未连接。在我的项目中,我已经多次检查了这一点。从情节提要和 PhotoViewController.h 文件都可以看出它是连接的。

所有这三种可能性都被排除在外,因为它可以在整个下载过程中成功地制作动画[self.spinner startAnimating];viewWillAppear

如果你喜欢,你可以下载这个项目。只需转到任何尝试显示大照片的屏幕,您就会看到微调器没有出现。这个项目有很多问题,但这是我现在关注的一个。

编辑1:

  • 我在 Git 上添加了项目缺少的依赖项,因此项目现在将为您编译

编辑 2(2013 年 2 月 2 日):

  • updatePhoto由于另一个视图控制器将prepareForSegue照片设置在FlickrPhotoViewController. 这可能会导致问题吗?
0 投票
7 回答
10016 浏览

ios - 如何在某些状态下删除 UIButton 的图像?

我正在做一个纸牌游戏。我希望卡片背面显示图像,卡片正面显示卡片内容。我已经将图像显示在背面,但我不知道在选择它时如何清除它。(所有 run-this-code-when-it's-selected 代码都在运行,所以我知道这不是没有实际改变状态的问题。)这是我的代码:

关于我做错了什么有什么想法吗?