我有这个小代码
NSMutableArray *myArray = [[NSMutableArray alloc] init];
NSNumber *myNumber = [NSNumber numberWithDouble:752.65];
[myArray addObject:myNumber];
Run Code Online (Sandbox Code Playgroud)
使用此代码,我将对象存储在数组中.但是现在我有两个彼此独立的对象.
如果我在将myNumber添加到数组后更改它,则数组内的值不会更改.我该如何存档?我试图只给出一个指向数组的指针,但它没有用.
是否可以对包含NSDictionary的NSArray使用快速枚举?
我正在浏览一些Objective C教程,以下代码将控制台踢入GDB模式
NSMutableArray *myObjects = [NSMutableArray array];
NSArray *theObjects = [NSArray arrayWithObjects:@"easy as 1",@"easy as two", @"Easy as Three"];
NSArray *theKeys = [NSArray arrayWithObjects:@"A",@"B",@"C"];
NSDictionary *theDict = [NSDictionary dictionaryWithObjects:theObjects forKeys:theKeys];
[myObjects addObject:theDict];
for(id item in myObjects)
{
NSLog(@"Found an Item: %@",item);
}
Run Code Online (Sandbox Code Playgroud)
如果我用传统的计数循环替换快速枚举循环
int count = [myObjects count];
for(int i=0;i<count;i++)
{
id item;
item = [myObjects objectAtIndex:i];
NSLog(@"Found an Item: %@",item);
}
Run Code Online (Sandbox Code Playgroud)
应用程序在没有崩溃的情况下运行,字典将输出到控制台窗口.
这是Fast Enumeration的限制,还是我错过了一些语言的巧妙?嵌套这样的集合时还有其他陷阱吗?
对于奖励积分,我如何使用GDB自行调试?
我有一个NSMutableArray,包含两种类型的对象.
两个对象都包含一个具有不同名称的日期字段(具有不同格式的日期字符串).
什么是根据日期对它们进行排序的最佳和最快的方法?NSSortDescriptor在这种情况下是否可以使用?
有什么区别:
[[NSMutableArray alloc] init]
Run Code Online (Sandbox Code Playgroud)
和
[NSMutableArray array]
Run Code Online (Sandbox Code Playgroud) 我有两个NSMutableArrays.第一个的内容是数字的,它与第二个的内容配对:
First Array Second Array
45 Test45
3 Test3
1 Test1
10 Test10
20 Test20
Run Code Online (Sandbox Code Playgroud)
这就是两个阵列的外观.现在我怎么能这么数量地命令它们最终如下:
First Array Second Array
1 Test1
3 Test3
10 Test10
20 Test20
45 Test45
Run Code Online (Sandbox Code Playgroud)
谢谢!
我有一个要求,我有一个使用的视频MPMediaPlayerController.除了视频我还有两个按钮,我需要在点击按钮时捕获当前的播放时间并单独存储所有相关的点击.我可以使用返回的"currentPlaybackTime"属性获取视频的当前播放时间NSTimeInterval.但有人可以帮助我如何将所有NSTimeInterval值存储到一个NSMutableDictionary.我尝试了以下方法:
-(void)onClickOfGood {
NSLog(@"The current playback time in good:%g",moviePlayerController.currentPlaybackTime);
currentPlaybackTime = moviePlayerController.currentPlaybackTime;
//NSArray *arrayContainsGoodClicks = [[NSArray alloc]initWithObjects:currentPlaybackTime, nil ];
NSNumber *goodTimeIntervals = [NSNumber numberWithDouble:currentPlaybackTime];
NSMutableArray *arrayContainsGoodClicks = [[NSMutableArray alloc]initWithObjects:goodTimeIntervals,nil ];
NSLog(@"The total count of Array is: %i",[arrayContainsGoodClicks count]);}
Run Code Online (Sandbox Code Playgroud)
但是每次点击好按钮后我都会将阵列计数仅为1.有人可以点亮我出错的地方吗?
现在我在简单的iPhone应用程序的工作,我已经存储在一定的价值NSMutableArray一样 "{54.399, 196}","{-268.246, 273}".,所以我希望得到54.399的第一indexpath,如何得到这个,请帮助我
提前致谢
出于某种原因,此示例代码有效:
NSArray *immutable = @[ @"a", @"b", @"c" ];
NSMutableArray *mutable = (__bridge id)CFPropertyListCreateDeepCopy(kCFAllocatorDefault, (__bridge CFArrayRef)immutable, kCFPropertyListMutableContainers);
Run Code Online (Sandbox Code Playgroud)
并且此代码nil由于转换而产生:
NSArray *immutable = @[ @"a", [NSNull null], @"c" ];
NSMutableArray *mutable = (__bridge id)CFPropertyListCreateDeepCopy(kCFAllocatorDefault, (__bridge CFArrayRef)immutable, kCFPropertyListMutableContainers);
Run Code Online (Sandbox Code Playgroud)
我试图找到NSNull使用此功能时不允许的任何提及.我怀疑它与方法检查财产是否可变的方式有关,但我不能用事实来支持这一点.
有任何想法吗?
objective-c core-foundation nsmutablearray nsmutabledictionary
removeLastObjectNSRangeException如果数组中没有对象,则引发一个.
出于某种原因,我似乎能够在空数组上调用此方法,并且不会抛出任何异常.
这是一个测试用例:
- (void)testNSMutableArray
{
NSMutableArray* arr = [[NSMutableArray alloc] init];
STAssertTrue([arr count] == 0, @"Array count should be 0");
STAssertThrows([arr removeLastObject], @"Should throw NSRangeException");
}
Run Code Online (Sandbox Code Playgroud)
这个测试用例在最后一行失败了,并带有以下消息:
[arr removeLastObject] raise(null).应抛出NSRangeException
我在这迷茫吗?文档错了吗?
当您将对象添加到集合中(例如)时NSMutableArray,对象是否被复制(即值语义)或被保留(即引用语义)?
我对示例感到困惑:
NSMutableString *testStr = [@"test" mutableCopy];
NSMutableArray *arrayA = [[NSMutableArray alloc] init];
[arrayA addObject:testStr];
NSLog(@"%@", arrayA); // output: test
testStr = [@"world" mutableCopy];
NSLog(@"%@", arrayA); // output: test
// testStr is copied - value semantics
NSMutableArray *testArr = [@[@1, @2] mutableCopy];
NSMutableArray *arrarB = [[NSMutableArray alloc] init];
[arrarB addObject:testArr];
NSLog(@"%@", arrarB); // output: [1, 2]
[testArr addObject:@3];
NSLog(@"%@", arrarB); // output: [1, 2, 3]
// testArr is retained - reference semantics
Run Code Online (Sandbox Code Playgroud)
您可以看到:如果对象是NSMutableString,则看起来对象已被复制-您更改对象将不会影响数组中的对象。
但是,如果对象是NSMutableArray,则在更改对象时,数组中的对象也会更改-就像保留对象或通过引用传递一样。 …
nsmutablearray ×10
objective-c ×7
ios ×4
cocoa ×3
iphone ×3
arrays ×1
cocoa-touch ×1
enumeration ×1
exception ×1
ios5 ×1
nsdictionary ×1
nsnumber ×1