我有一个NSArray,我想将它分成两个相等的部分(如果奇数"计数"然后添加到后一个新数组) - 我想把它分成"中间"可以这么说.
以下代码完全符合我的要求,但有更好的方法吗?:
// NOTE: `NSArray testableArray` is an NSArray of objects from a class defined elsewhere;
NSMutableArray *leftArray = [[NSMutableArray alloc] init];
NSMutableArray *rightArray = [[NSMutableArray alloc] init];
for (int i=0; i < [testableArray count]; i=i+1) {
if (i < [testableArray count]/2) {
[leftArray addObject:[testableArray objectAtIndex:i]];
}
else {
[rightArray addObject:[testableArray objectAtIndex:i]];
}
}
Run Code Online (Sandbox Code Playgroud)
一旦leftArray和rightArray被制作出来,我就不会改变它们,所以它们不需要是"可变的".我认为可能有一种方法可以使用ObjectsAtIndexes方法或一些快速枚举方法来完成上述代码?但是我无法使用以下代码(或其他变体):
NSArray *leftArray = [[NSArray alloc] initWithObjects:[testableArray objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(????, ????)]]];
NSArray *rightArray = [[NSArray alloc] initWithObjects:[testableArray objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(????, ????)]]];
Run Code Online (Sandbox Code Playgroud)
有没有人知道我是否朝着正确的方向前进或指向正确的方向?
谢谢!
这是整个崩溃日志.EXC_CORPSE_NOTIFY异常通知的含义是什么?
我必须更换一些关于我们公司的字符串.
Incident Identifier: 40BD3A10-43A5-4F0D-A283-218E1D3BEE46
CrashReporter Key: 3d8d75a8f5eeb7c3d28d52883b92ed4e0fb2529e
Hardware Model: iPhone7,1
Process: XxxxxXxxApp [13539]
Path: /private/var/mobile/Containers/Bundle/Application/148C5049-8883-4E9D-BB98-5498EEA95191/XxxxxXxxApp.app/XxxxxXxxApp
Identifier: com.Lotum.MCOLotumMobile
Version: 7.0.8.0 (7.0.8)
Code Type: ARM-64 (Native)
Parent Process: launchd [1]
Date/Time: 2016-01-15 11:22:25.25 +0800
Launch Time: 2016-01-15 10:41:58.58 +0800
OS Version: iOS 9.2 (13C75)
Report Version: 105
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Triggered by Thread: 16
Filtered syslog:
None found
Last Exception Backtrace:
0 CoreFoundation 0x1840c5900 __exceptionPreprocess + 124
1 libobjc.A.dylib 0x183733f80 objc_exception_throw …Run Code Online (Sandbox Code Playgroud) 我今天有一个关于Objective-C的问题涉及NSMutableArray.来自.net/c#背景我在处理这些事情时遇到了一些麻烦.
假设我有一个名为"Song"的对象
我的歌有3个属性:
我有一个NSMutableArray或NSArray,它拥有我所有的Song对象.
我将如何尝试"查询"我的阵列以获得仅具有(唯一)艺术家或流派的新阵列.
在.net中你会用DISTINCT子句编写一个简单的LINQ查询,如何在Objective-C中解决这个问题?我猜测谓词,但我很难找到解决方案.
提前致谢.
我需要检查NSArray动态存储的值.我应该如何在Objective-C中打印数组值?
NSArray可以保留一系列bool值吗?
以下代码运行
BOOL b = NO;
NSMutableArray *array = [[NSMutableArray alloc] init];
[array addObject:[NSNumber numberWithBool:b]];
NSLog(@"value is %d", [array objectAtIndex:0] );
Run Code Online (Sandbox Code Playgroud)
但是,我没有像预期的那样得到0的值.相反,这就是我得到的
值是37736096
最近的SO 讨论使我感到困惑.NSMutableArray原型addObject:是
- (void)addObject:(id)anObject
Run Code Online (Sandbox Code Playgroud)
并id在objc.h中定义为
typedef struct objc_class *Class;
typedef struct objc_object {
Class isa;
} *id;
Run Code Online (Sandbox Code Playgroud)
当我将一个NSObject或子类添加到一个时NSMutableArray,它的保留计数会递增,当我从中删除它时,NSMutableArray它会递减.这是否意味着如果一个id type不是一个NSObject或一个子类被添加到一个NSMutableArray,它必须响应保留和释放消息?这个定义id似乎并不强迫这一点.它是一个客观的C指令,任何人id type都应该响应标准的内存管理消息吗?
我无法存储NSArray NsUserDefaults.该应用程序
在这一行中崩溃了
[savedData setObject:jsonValue forKey:@"JSONDATA"];
以下是我的代码.我在下面提到了我的日志错误
NSArray *jsonValue =[NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSUserDefaults *savedData = [NSUserDefaults standardUserDefaults];
[savedData setObject:jsonValue forKey:@"JSONDATA"];
[savedData synchronize];
Run Code Online (Sandbox Code Playgroud)
错误日志:
*** Terminating app due to uncaught exception '`NSInvalidArgumentException`', reason: '*** -
[NSUserDefaults setObject:forKey:]: attempt to insert non-property list object <CFBasicHash 0x8c62b10 [0x1d2aec8]>{type = immutable dict, count = 3,
entries =>
Run Code Online (Sandbox Code Playgroud) 我有一个NSArray myArray的数组,这里是内容:
(
"<MPConcreteMediaItem: 0x1b7dd0> 8671085923283003246",
"<MPConcreteMediaItem: 0x1b7e50> 16275751483823231324",
"<MPConcreteMediaItem: 0x1b7e70> 4976771456698615367"
)
Run Code Online (Sandbox Code Playgroud)
我使用下面的代码分配给NSString myString:
NSString *myString = [myArray description];
Run Code Online (Sandbox Code Playgroud)
而且输出仍然如预期:
(
"<MPConcreteMediaItem: 0x1b7dd0> 8671085923283003246",
"<MPConcreteMediaItem: 0x1b7e50> 16275751483823231324",
"<MPConcreteMediaItem: 0x1b7e70> 4976771456698615367"
)
Run Code Online (Sandbox Code Playgroud)
现在,假设我想将myString转换回名为newArray的数组,我使用了这个:
NSArray *newArray = [[NSArray alloc]init];
newArray = [myString componentsSeparatedByString:@","];
Run Code Online (Sandbox Code Playgroud)
但是newArray的内容现在不同了:
(
"(
\"<MPConcreteMediaItem: 0x1b7dd0> 8671085923283003246\"",
"
\"<MPConcreteMediaItem: 0x1b7e50> 16275751483823231324\"",
"
\"<MPConcreteMediaItem: 0x1b7e70> 4976771456698615367\""
)"
)
Run Code Online (Sandbox Code Playgroud)
知道我需要做些什么来解决这个问题吗?
有
enum {MyA, MyB, Null};
typedef NSNumber myEnum;
Run Code Online (Sandbox Code Playgroud)
要么
typedef enum {MyA, MyB, Null} myEnum;
Run Code Online (Sandbox Code Playgroud)
1)如何创建数组
myEnum* myEnumTemp[] = {MyA, MyB};
Run Code Online (Sandbox Code Playgroud)
只是给 "Implicit conversion of 'int' to NSNumber* is disallowed with ARC(ref. counting)
2)如果你能够创建一个数组如何将其转换为NSArray?
NSArray和CCArray有什么区别?另外,在什么情况下,对于游戏编程,一个人会更喜欢另一个?
nsarray ×10
objective-c ×10
ios ×4
arrays ×1
boolean ×1
cocoa-touch ×1
crash ×1
enums ×1
foundation ×1
nsstring ×1