我在我的*.h文件中声明我的数组:
@interface aViewController: UIViewController
{
NSMutableArray *anArray; // You will need to later change this many times.
}
@end
我为它的*.m文件分配内存:
-(void) viewDidLoad
{
anArray = [[NSMutableArray alloc] init];
}
我单击一个测试按钮来加载我的数组(最终它需要在每次点击时加载DIFFERNT值):
anArray = [NSMutableArray arrayWithObjects:@"one", @"two", @"three", nil];
我在这里释放它:
-(void) dealloc
{
[anArray release];
[super dealloc];
}
这一切看起来都不错吗?
因为我以后运行此代码时崩溃:
NSLog(@"%d", [anArray count]);
不知道为什么一个简单的"NSLog()和count"会使一切崩溃.
短剑,
让我这样说吧:我对指针,数组,字符串和内存有很大的误解.
我已经阅读了我能在其上找到的所有内容......但是(还)要找到一个简单,清晰,易于理解的描述.
你能建议吗?(希望小于10页的阅读.)是否有解释的参考JUST这个话题:"你有12年以上的编码经验有史以来处理分配内存或指针......但没有" ......从的角度来看. )
所以变量名不是我引用对象的方式吗?那为什么呢?
我已经习惯了许多其他语言:
myString = "this" myString = "that" myInt = 5 myInt = 15
(什么可以更简单.)
在我看来这样做是最简单的方法.(而且它似乎有效.但这是真的正确吗?) …
我目前正在使用NSMutableArrays我的开发来存储从HTTP Servlet获取的一些数据.
一切都很好,因为现在我必须对我的数组中的内容进行排序.
这就是我做的:
NSMutableArray *array = [[NSMutableArray arrayWithObjects:nil] retain];
[array addObject:[NSArray arrayWithObjects: "Label 1", 1, nil]];
[array addObject:[NSArray arrayWithObjects: "Label 2", 4, nil]];
[array addObject:[NSArray arrayWithObjects: "Label 3", 2, nil]];
[array addObject:[NSArray arrayWithObjects: "Label 4", 6, nil]];
[array addObject:[NSArray arrayWithObjects: "Label 5", 0, nil]];
Run Code Online (Sandbox Code Playgroud)
第一列包含Label,第二列是我希望数组按降序排序的分数.
我存储数据的方式是好的吗?有没有更好的办法做到这一点比使用NSMutableArrays的NSMutableArray?
我是iPhone开发人员的新手,我看过一些关于排序的代码,但对此并不满意.
提前感谢您的回答!
我正在编写一个包含一个函数的iPhone应用程序.它可以将NSMutableArray转换为CSV文件.但是,我不知道该怎么做.任何人都可以帮我这样做吗?非常感谢你.
// ------更新-----
谢谢大家的回复.
实际上,数组包含元素的对象,但是我可以将它全部修改为数组,如下所示(我想这样做更容易).
该数组是NSMutableArray*csvArray,该数组包含数据,如下例所示.
csvArray[0] = First Name
csvArray[1] = Last Name
csvArray[2] = Phone
csvArray[3] = Tom
csvArray[4] = Chan
csvArray[5] = 123
csvArray[6] = Peter
csvArray[7] = Wong
csvArray[8] = 456
csvArray[9] = Mary's
csvArray[10] = Cho"w
csvArray[11] = 789...
Run Code Online (Sandbox Code Playgroud)
阵列的开头有3个选项卡,分别是名字,姓氏和电话.对于数据,它还包含"和符号.因此,我不能只用','符号来切割数组.
我想输出的格式如下
//---------------------------
First Name, Last Name, Phone // <- it have the \r\n between each row of data
Tom, Chan, 123
Peter, Wong, 456
Mary's, Cho"w, 789 ...
//---------------------------
Run Code Online (Sandbox Code Playgroud) 我的应用程序中需要一个堆栈ADT.我想避免制作包装纸NSMutableArray; 某个地方的基金会必须有一个有效的实施.
那么,我该如何访问它?
嗨所有,
我有一个NSMutableArray包含各种NSDictionary.在每个NSDictionary中,我有两个键值对,例如:username和loginDate.
我需要根据loginDate降序和用户名升序对此NSMutableArray中的所有NSDictionary进行排序.
只是为了更详细地说明:
NSMutableArray (index 0): NSDictionary -> username:"user1", loginDate:20 Dec 2011
NSMutableArray (index 1): NSDictionary -> username:"user2", loginDate:15 Dec 2011
NSMutableArray (index 2): NSDictionary -> username:"user3", loginDate:28 Dec 2011
NSMutableArray (index 3): NSDictionary -> username:"user4", loginDate:28 Dec 2011
Run Code Online (Sandbox Code Playgroud)
排序后,数组中的结果应为:
NSMutableArray (index 0): NSDictionary -> username:"user3", loginDate:28 Dec 2011
NSMutableArray (index 1): NSDictionary -> username:"user4", loginDate:28 Dec 2011
NSMutableArray (index 2): NSDictionary -> username:"user1", loginDate:20 Dec 2011
NSMutableArray (index 3): NSDictionary -> username:"user2", loginDate:15 Dec 2011
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?经历了一些sortUsingComparator方法,无法想出办法.
我有一个带有许多对象的NSMutableArray.我可以直接从索引范围'i'到'j'提取子数组吗?是的,我知道我可以做一个循环并使用objectAtIndex:x并将每个对象提取到一个新的.
我需要调用一个输入是一个数组的方法,并且只想将这个数组用于验证数据.
我已经使用各种排序方法查看了几个答案NSMutableArray,但由于某种原因它们不适合我.
我只是试图通过Delay每个字典中的键对包含字典的可变数组进行排序.但是,"sorted"数组与原始数组完全相同.
顺便说一句,如果我创建一个虚拟可变数组并用包含数字的字典填充它,它可以正常工作,但由于某种原因它不会对我正在初始化的这个可变数组进行排序.
我究竟做错了什么?
这是我的代码:
playlistCalls = [[NSMutableArray alloc] initWithArray:[currentPlaylist objectForKey:@"Tunes"]];
NSLog(@"original %@", playlistCalls);
NSSortDescriptor *delay = [NSSortDescriptor sortDescriptorWithKey:@"Delay" ascending:YES];
[playlistCalls sortUsingDescriptors:[NSArray arrayWithObject:delay]];
NSLog(@"sorted %@", playlistCalls);
Run Code Online (Sandbox Code Playgroud)
这是包含字典的数组:
2012-06-04 15:48:09.129 MyApp[57043:f503] original (
{
Name = Test Tune;
Delay = 120;
Volume = 100;
},
{
Name = Testes;
Delay = 180;
Volume = 100;
},
{
Name = Testing;
Delay = 60;
Volume = 100;
}
)
2012-06-04 15:48:09.129 MyApp[57043:f503] sorted (
{
Name = Test …Run Code Online (Sandbox Code Playgroud) 我是StackOverflow的新手,如果我在问题中忘记了一些关键元素,请提前道歉.这是一个很长的,所以忍受我!
迭代JSON-webservice结果:
对于IOS5 iPad应用程序,我从Web服务收集JSON信息,并通过:
NSData *data = [NSData dataWithContentsOfURL:url];
NSDictionary *json =
[NSJSONSerialization JSONObjectWithData:data options:kNilOptions
error:&error];
Run Code Online (Sandbox Code Playgroud)
我将迭代返回NSDictionary并将返回的对象及其属性存储为自定义类.
自定义类包含多个属性,包括AmountInShoppingCart-value.
我使用这个自定义类来表示我们在商店中销售的商品,因此一个NSMutableArray由所有返回的对象组成并显示给用户.如果是AmountInShoppingCart value > 0,则将对象放入ShoppingCart NSMutableArray(这是一个单例).
检查ShoppingCart中的重复项:
为了确保ShoppingCart它不包含任何重复的条目,我在ShoppingCartController(也借用SO)中有这样的函数:
- (void)checkForDuplicates
{
NSMutableSet *seen = [NSMutableSet set];
NSUInteger i = 0;
NSLog(@"ShoppingCartArray count: %u",[ShoppingCartArray count]);
//Iterate over the Array to check for duplicates, and to sync the list with the
cart.
while (i < [ShoppingCartArray count]) {
id obj = …Run Code Online (Sandbox Code Playgroud) 我试图用不同的颜色绘制UIBezierPath线是我的失败.所有行都更改为当前选定的颜色.我的所有路径和信息都存储在名为pathInfo的NSMutableArray中.在路径信息中,我放入包含路径,颜色,宽度和行类型的数组.除了所有线条都变成用户选择的任何颜色之外,这种方法都很好.我非常感谢任何帮助!
- (void)drawRect:(CGRect)rect {
UIBezierPath *drawPath = [UIBezierPath bezierPath];
drawPath.lineCapStyle = kCGLineCapRound;
drawPath.miterLimit = 0;
for (int i = 0; i < [pathInfo count]; i++){
NSArray *row = [[NSArray alloc] initWithArray:[pathInfo objectAtIndex:i]];
NSLog(@"Path: %@",[row objectAtIndex:0]);
NSLog(@"Color: %@",[row objectAtIndex:1]);
NSLog(@"Width: %@",[row objectAtIndex:2]);
NSLog(@"Type: %@",[row objectAtIndex:3]);
//width
drawPath.lineWidth = [[row objectAtIndex:2] floatValue];
//color
[[row objectAtIndex:1] setStroke];
//path
[drawPath appendPath:[row objectAtIndex:0]];
}
UIBezierPath *path = [self pathForCurrentLine];
if (path)
[drawPath appendPath:path];
[drawPath stroke];
}
- (UIBezierPath*)pathForCurrentLine {
if (CGPointEqualToPoint(startPoint, CGPointZero) && CGPointEqualToPoint(endPoint, CGPointZero)){ …Run Code Online (Sandbox Code Playgroud) 我试图使用NSPredicate过滤可变数组的对象,并且无法访问包含我想要过滤的属性的级别.
给出一个由类似自定义对象组成的简化示例.
我有一个祖父母的NSMutableArray,我想找到所有拥有10岁的GrandChildren的祖父母物品.因此,孙子孙女从根本上是两层.孩子有其他年龄属性.
即.祖父母有一个阵列属性父母和父母有一个阵列属性儿童和儿童有一个整数属性年龄.
以下NSPredicate未返回任何结果."SELF.parents.children.age == 10".
我意识到,由于这些是嵌套集合,这个谓词可能是错误的方式,但我仍然坚持如何访问该级别.也许通过子查询或集合运算符,但我无法解决它.
要记住的一件事是,我显然仍然希望有多个不同年龄的孙子孙女的祖父母,其中一个年龄为10岁.
nsmutablearray ×10
objective-c ×8
iphone ×4
sorting ×3
ios ×2
cocoa ×1
csv ×1
dealloc ×1
equality ×1
hash ×1
ios5 ×1
nsarray ×1
nsdictionary ×1
nspredicate ×1
stack ×1
sub-array ×1
uibezierpath ×1
web-services ×1