NSDictionary适用于键值对,当您有三个值时,哪种数据结构最适合?最好为这3个值创建一个类,然后让数组中的每个对象包含该类的实例?
具体来说:数据结构,我们称之为Person,我设想有三个值:(NSString)name,(int)age,(BOOL)isAlive
这些将保存在数组(?)中.能够同时使用名称作为键,并且从零开始引用带有数字的整个块是很重要的.
我有一些这样的数据:
1,111,2,333,45,67,322,4445
NSArray *array = [[myData allKeys]sortedArrayUsingSelector: @selector(compare:)];
Run Code Online (Sandbox Code Playgroud)
如果我运行此代码,它的排序如下:
1,111,2,322,333,4445,45,67,
但我其实想要这个:
1,2,45,67,111,322,333,4445
我该如何实现它?你.
我的第一直觉是
FooType *myFoo = nil;
for (id obj in myArray) {
if ( [obj isKindOfClass:[FooType class]] ) myFoo = obj;
}
Run Code Online (Sandbox Code Playgroud)
有了Objective-C和NSArray的所有好东西,就必须有更好的方法,对吧?
我刚刚开始在MonoMac上开展一个项目,到目前为止这个项目非常酷.但是还有一些我不确定的事情.例如:你如何使用数组?这是我发现的:当我NSArray从一个我正在调用的方法返回时,我尝试获取该数组中的一个自定义对象,我不断得到类似" cannot convert type System.IntPtr to MyType"的东西.
NSArray groupArray = (NSArray)groupDictionary.ObjectForKey(key);
MyType myObject = (MyType)groupArray.ValueAt(0);
Run Code Online (Sandbox Code Playgroud)
这是我回来的数组.但是,如果我想自己创建一个数组怎么办?NSArray的实现不允许我实例化它.所以如果我把MonoMac网站弄好了,我应该使用像这样的普通数组
int[] intArray = int[10];
Run Code Online (Sandbox Code Playgroud)
分别是一个强类型数组,我不知道如何在C#中使用它.
那么去这里的方式是什么?
谢谢
-f
我有一个包含2个字符串的数组的plist看到图像:
http://imageshack.us/photo/my-images/263/myplist.png/
在我的viewDidLoadi中添加:
NSString *file = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"];
NSArray *array = [NSArray arrayWithContentsOfFile:file];
NSLog(@"array = %@", array);
Run Code Online (Sandbox Code Playgroud)
但我总是null为什么?感谢帮助.
更新:解决方案是你需要手动编辑plist文件(Xcode4默认使用Dictionnary)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<array>
<string>HO</string>
<string>HI</string>
</array>
</array>
</plist>
Run Code Online (Sandbox Code Playgroud) 我有一个NSArray与NSNumber对象具有int值:
arrayOfValues = [[[NSArray alloc] initWithObjects: [NSNumber numberWithInt:1], [NSNumber numberWithInt:3], [NSNumber numberWithInt:5], [NSNumber numberWithInt:6], [NSNumber numberWithInt:7], nil] autorelease];
[arrayOfValues retain];
Run Code Online (Sandbox Code Playgroud)
我试图像这样迭代数组:
int currentValue;
for (int i = 0; i < [arrayOfValues count]; i++)
{
currentValue = [(NSNumber *)[arrayOfValues objectAtIndex:i] intValue];
NSLog(@"currentValue: %@", currentValue); // EXE_BAD_ACCESS
}
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
我想根据他们的frame.origin.y对UIViews的NSMutableArray进行排序,我希望y的最低视图是第一个等等.可能是2个UIViews具有相同的起源.这有一个现有的方法吗?
我试图用不同的颜色绘制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) 以下是我的代码段
//Search Bar Delegate
func searchBar(searchBar: UISearchBar, textDidChange searchText: String)
{
println(searchText)
var predicate:NSPredicate=NSPredicate(format: "SELF CONTAINS[c] \(searchText)")!
self.listItemToBeDisplayed=listItem.filteredArrayUsingPredicate(predicate)
(self.view.viewWithTag(1) as UITableView).reloadData()
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误:
***由于未捕获的异常'NSUnknownKeyException'终止应用程序,原因:'[<__ NSCFString 0x17405ef90> valueForUndefinedKey:]:此类不是密钥V的密钥值编码兼容的.
我想过滤数组中的字符串以通过我的搜索字符串进行过滤.如果我的搜索字符串包含在数组中的任何字符串中,则应该列出它.
我正在学习使用谓词进行过滤.我找到了一个教程,但是在Swift 3中有一个方面对我不起作用.这是一些特定的代码:
let ageIs33Predicate01 = NSPredicate(format: "age = 33") //THIS WORKS
let ageIs33Predicate02 = NSPredicate(format: "%K = 33", "age") //THIS WORKS
let ageIs33Predicate03 = NSPredicate(format: "%K = %@", "age","33") //THIS DOESN'T WORK
let ageIs33Predicate04 = NSPredicate(format: "age = %@","33") //THIS DOESN'T WORK
Run Code Online (Sandbox Code Playgroud)
所有4编译,但最后2编译没有结果,即使我有一个年龄= 33的情况.这是教程中的测试完整测试代码:
import Foundation
class Person: NSObject {
let firstName: String
let lastName: String
let age: Int
init(firstName: String, lastName: String, age: Int) {
self.firstName = firstName
self.lastName = lastName
self.age = age
}
override var description: String …Run Code Online (Sandbox Code Playgroud) nsarray ×10
objective-c ×6
iphone ×3
arrays ×2
ios ×2
nspredicate ×2
sorting ×2
c# ×1
iterator ×1
monomac ×1
nsbundle ×1
nsdictionary ×1
nsnumber ×1
plist ×1
swift ×1
swift3 ×1
uibezierpath ×1
uiview ×1