- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试掌握 Objective C 和 Cocoa,所以我可能在这里使用了错误的术语。
我为一副纸牌创建了一个 Objective C 类,由我的主 AppDelegate.h 和 AppDelegate.m 读取,它有两个方法,deckOfCards 和 pickACard。 DeckOfCards 只是一个 NSMutableArray,其中每种卡类型都以字符串形式写出,然后在 pickACard 中我创建一个如下所示的新数组:
-(void)pickACard
{
DeckOfCards *newDeck = [[DeckOfCards alloc] init];
int r = arc4random() % 52;
NSLog (@"The card you picked is: %@, and there are %i cards left", [newDeck objectAtIndex:r], [newDeck count]);
[newDeck removeObjectAtIndex:r];
}
但是 XCode 说我无法在这个新数组上使用 objectAtIndex 和 removeObjectAtIndex,因此我无法随机选择一张卡,然后通过删除数组的该部分来“将其从包中删除”。
当它全部在 DeckOfCards 中时,这确实有效,但是当 AppDelegate.m 调用它时,它会创建一个新数组,这样我就可以获得不同的卡片,但永远不会从包中删除多于一张。
我猜我没有正确创建这个新数组。
为了更清楚起见,DeckOfCards.h 是这样的:
#import <Foundation/Foundation.h>
@interface DeckOfCards : NSObject
{
@private
}
-(void) deckOfCards;
-(void) pickACard;
@end
DeckOfCards.m 是这样的:
@implementation DeckOfCards
-(void)deckOfCards
{
NSMutableArray *deckOfCards = [NSMutableArray arrayWithObjects:
@"One of Hearts", @"Two of Hearts"..., nil];
}
-(void)pickACard
{
DeckOfCards *newDeck = [[DeckOfCards alloc] init];
int r = arc4random() % 52;
NSLog (@"The card you picked is: %@, and there are %i cards left",[newDeck objectAtIndex:r], [newDeck count]);
[newDeck removeObjectAtIndex:r];
}
@end
最佳答案
我在这里发现了一些问题。编译器问题的直接原因是您尝试在 DeckOfCards
实例上调用 NSMutableArray
方法。相反,您希望在方法 -[DeckOfCards DeckOfCards]
返回的 NSMutableArray
上调用这些方法。它看起来像这样:
DeckOfCards *newDeck = [[DeckOfCards alloc] init];
NSMutableArray *deckArray = [newDeck deckOfCards];
int r = arc4random() % 52;
NSLog (@"The card you picked is: %@, and there are %i cards left",[deckArray objectAtIndex:r], [deckArray count]);
[deckArray removeObjectAtIndex:r];
但这引出了我们的下一个问题 - -deckOfCards
实际上并不返回任何内容 - 它的返回类型被定义为 void
。因此,为了将该 NSMutableArray
实例返回到程序的其余部分,您必须返回
它,并使用适当的返回类型定义该方法。如果我们只是为了解决这个问题,我们会更改您的 -deckOfCards
方法,如下所示:
-(NSMutableArray *)deckOfCards
{
NSMutableArray *deckOfCards = [NSMutableArray arrayWithObjects:
@"One of Hearts", @"Two of Hearts"..., nil];
return deckOfCards;
}
好的,现在应该可以编译了。但这里有一些严重的错误。恐怕我现在没有太多的时间来回答这个问题,但我建议你阅读一些 Objective-C 的介绍性内容,重点关注对象和类之间的区别,以及对象的生命周期和内存管理。本质上,没有什么是持久的。无论您在 DeckOfCards
的任何实例上调用 -pickACard
多少次,您总是会实例化一个单独的实例,然后该实例将获得一个全新的 NSMutableArray
实例化。但这些对象都不会被保留(假设您正在使用自动引用计数),并且它们都会立即消失。因此,您每次都会从 -pickACard
获得一套全新的 52 张牌。
希望这有帮助。通过花一些时间阅读和学习 Objective-C 和面向对象编程的基础知识,您将能够很好地使该程序按照您的意愿运行。如果您有疑问,请告诉我,我会尽力回答。
关于objective-c - 如何在数组对象中使用 objectAtIndex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12229248/
救命!我已经为这个问题苦恼了 1 个小时了。 我正在我的 .h 文件中创建一个数组 @interface LeftMenuViewController : UIViewController
我想使用 NSMutableArray 中的 ValueForKey 替换 objectAtIndex。我已经尝试了下面的代码,但是没有用,它崩溃了, [[students valueForKey:@
我有一个包含 10 个对象的 Array。我将第一个对象放入带有 String 的 Label 中。 然后我想要一个将 objectAtIndex 增加 1 的方法。 这是我的代码: //.m @in
我有 NSMutableArray “Tag”,其对象位于索引 0 上:“data”、“data1”、“data2”,索引 1:“data3”,索引 2:“data2” ...我选择的标签是“data
嗨,我有一个数组数组,我在添加某个索引后删除了一个对象。不知何故,我认为这表现得很奇怪,或者我可能忽略了一些事情。这是代码。我用 nslogs 对其进行跟踪。 for (int i = 0;
在我的 UIScrollView 中,我的数组中有 30 张图像。我尝试在数组中获取 objectAtIndex。我希望能够在 UIScrollView 停止滚动时在特定图像中显示动画。所以我在下面尝
如何在我的方法中获取 objectAtIndex。 例如,如果我使用 didSelectRowAtIndexPath:(NSIndexPath *)indexPath 我可以得到它 NSLog(@"
我正在尝试掌握 Objective C 和 Cocoa,所以我可能在这里使用了错误的术语。 我为一副纸牌创建了一个 Objective C 类,由我的主 AppDelegate.h 和 AppDele
我在使用 NSFetchedResultsController objectAtIndex 时出现内存泄漏:栈帧如下: 0 CoreFoundation __CFDataAllocate
我正在开发iOS应用程序。值存储在Array上,但是当我运行应用程序时,它崩溃,数组索引超出范围。请先帮助并谢谢。 代码: daysOfWeek = [NSArray arrayWithObjects
我有一个我想要一个值的 NSArray。 _membersArray = [_detailItem valueForKey:@"members"]; 当我使用此代码时: NSLog(@"%lu", (
我有一个 UITableView,它由从 XML 提要解析的数据数组填充。我正在努力寻找此错误的原因,并想知道是否有人可以帮助我。该错误不会经常发生。它仅在数组数量很大时发生,例如 10-15 个对象
我收到上述错误,但不知道为什么,因为我在另一个示例中实现了相同的代码。 “服务”是我的 NSMutableArray,“服务名称”是带有标签 2 的 TableView 上的标签。在 viewdidl
初学者 iOS 开发问题在这里。 我有以下格式的 plist: 我在我的应用程序中使用以下方法将这个 plist 转换为一个数组: NSMutableArray *array2 = [[NSMutab
我正在构建一个简单的 Swift CoreData TableView 应用程序。我已成功将数据保存到数据库并在 TableView 中重新加载数据。接下来我要做的是编辑这些数据。通过点击表格单元格/
所以我在这里有函数 collectionView: cellForItemAtIndexPath: func collectionView(collectionView: UICollectionVi
NSInteger *count = [monLessonArrayA count]; 对于 (i = 0; i < count; i++) { arrayVar = [monLessonArrayA
2012-06-15 17:53:25.532 BadgerNew[3090:707] *** Terminating app due to uncaught exception 'NSRangeEx
这个问题在这里已经有了答案: 关闭 9 年前。 Possible Duplicate: Is there some literal dictionary or array syntax in Obj
我有一个 NSArray,其中包含索引 0 - 9 的 10 个对象。数组中的每个条目都是一个引号。 当我的用户选择“随机引用”选项时,我希望能够从数组中选择一个随机条目并显示该条目中包含的文本。 有
我是一名优秀的程序员,十分优秀!