我有一个UIView作为属性的类.有时我传入UILabel; 有时是UITextField.无论我传入哪个,我都希望课程设置文本.目前我这样做,这有效:
if ([self.viewToUpdate respondsToSelector:@selector(setText:)] && !self.newAnswer)
[self.viewToUpdate setText:[[self.choices objectAtIndex:indexPath.row] text]];
Run Code Online (Sandbox Code Playgroud)
问题是,这给出了警告,因为即使我正在检查respondsToSelector
,Xcode也不知道我的UIView会响应setText:
.如何删除此警告?
我知道我可以专门检查它是TextField还是Label,然后分别转换为TextField或Label,但这会很痛苦,如果我有更多类型的视图,我会有为每一个添加几行代码.
我想创建自己的协议,然后让我的类有id作为viewToUpdate的类型...但当然UITextField和UILabel不符合该协议...
有没有办法录制到音频文件的末尾?我们不能暂停录制而不是停止录制,因为用户需要以后能够返回应用并为录制添加更多音频.目前,音频作为NSData存储在CoreData中.NSData AppendData
不起作用,因为生成的音频文件仍然报告它只与原始数据一样长.
另一种可能性是将原始音频文件与新音频文件连接起来,并将它们连接成一个音频文件,如果有任何方法可以做到这一点.
除了一个部分,我有几个大致相同的布局文件.有没有办法让我可以在一个地方拥有共同的XML; 而不是复制/粘贴,并且当我想要进行1次更改时必须更新一堆文件?
我知道我可以从其他XML文件中包含XML,但是公共代码不是内部控件; 它是外包装; 所以包括不起作用.基本上,我有一堆文件,看起来像这样:
<LinearLayout
android:id="@+id/row"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal">
<ImageView android:layout_height="26dp"
android:id="@+id/checkImage"
android:layout_width="26dp"
android:layout_alignParentTop="true"
android:scaleType="fitCenter"/>
<!-- Different types of views go here depending on which layout file it is -->
<ImageButton android:layout_height="fill_parent"
android:id="@+id/playButton"
android:layout_width="42dp"
android:src="@drawable/play_button"
android:scaleType="center"
android:background="#00000000"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
基本上,我想做ASP.Net对Master Pages的处理.这有什么选择吗?
我有一个泛型类,其子类提供特定类型.
public abstract class GenericBase<T>
where T:Interface1
{
}
Run Code Online (Sandbox Code Playgroud)
我将泛型与特定实现子类化:
public class Customer:
GenericBase<Type1>
Run Code Online (Sandbox Code Playgroud)
(Type1
实施Interface1
).
我有另一个抽象基类,它引用了这个:
protected GenericBase<Interface1> genericInstance;
Run Code Online (Sandbox Code Playgroud)
最后,当我尝试将genericInstance分配给基类的实例时,它给了我一个编译器错误,说它"无法隐式地将Customer转换为GenericBase <Interface1>".
base.genericInstance = new Customer(); //Compiler error
Run Code Online (Sandbox Code Playgroud)
我不明白为什么我会得到这个错误,如果Customer
是一个子类型GenericBase<Type1>
和Type1
实现Interface1
.是不是Customer
有效的一种类型GenericBase<Interface1>
,如果它是一个子类GenericBase<Type1>
?
我想我在这里误解了一些关于泛型的东西; 有没有办法允许这种行为?
这两种方法有什么区别吗?两者都返回一个打开的SQLiteDatabase.如果不存在,则两者都可以创建数据库.当需要读/写时,SQLiteOpenHelper也有getWriteableDatabase ...
我应该使用哪种方法?基于我见过的示例代码,我首先使用SQLiteOpenHelper创建我的数据库,但在需要使用数据库时调用SQLiteDatabase.openDatabase.
当str为NULL时,以下代码给出NULL引用错误,但仅在我们的生产服务器上,而不是在我们的开发或测试服务器上.
<div>
<input value="@Html.Raw(str)" />
</div>
Run Code Online (Sandbox Code Playgroud)
这很好用:
<div>
<input value="@str" />
</div>
Run Code Online (Sandbox Code Playgroud)
就像这样:
<div>
Values is: @Html.Raw(str)
</div>
Run Code Online (Sandbox Code Playgroud)
所以这不是@ Html.Raw无法接受NULL参数的问题.我不确定在那种情况下它究竟返回了什么; 但是在一台服务器上它与另一台服务器上有所不同.
两者都运行相同版本的System.Web.Mvc,但我不知道要检查的其他DLL.System.Web.WebPages是应该包含崩溃的MVC方法的程序集,它们在两台服务器上都是相同的版本.这是MVC版本4; .Net 4.5.
这样的事情怎么可能?WriteAttributeTo方法中出现错误,但我甚至不知道为什么会在这里调用,因为它使用的是标准HTML输入标记,而不是@Html.TextBoxFor帮助程序.
编辑 可能有用的一件事是,如果其他人尝试将该代码放在他们自己的视图中,以查看它是否有效.至少那时我会知道这是我的生产环境还是测试环境出乎意料的行为.
这是完整的堆栈跟踪:
在System.Web.WebPages.WebPageExecutingBase.WriteAttributeTo(String pageVirtualPath,TextWriter writer,String name,PositionTagged
1 prefix, PositionTagged
1 suffix,AttributeValue [] values)at System.Web.WebPages.WebPageExecutingBase.WriteAttributeTo(TextWriter writer,String name,PositionTagged1 prefix, PositionTagged
1 suffix, System.Web.WebPages.WebPageExecutingBase.WriteAttribute(String name,PositionTagged)中的AttributeValue [] values)1 prefix, PositionTagged
位于c:\ Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\fdd62ffd\90d151d1\App_Web_xsolwitr.2.cs中ASP._Page_Views_AdminSurvey_TopDown_cshtml.Execute()的1个后缀,AttributeValue []值): System.Web.WebPages.Web上的System.Web.WebPages.Web中的System.Web.Web.Mtc.Web上的System.Web.Mvc.WebViewPage.ExecutePageHierarchy()中的System.Web.WebPages.Web.B.P.P. System.Web.Mvc.ControllerActionInvoker的System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)中的pageContext,TextWriter writer,WebPageRenderingBase startPage.<> c_ DisplayClass1a.b _17()at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter (IResultFilter过滤器,ResultExecutingContext preContext,Func1 continuation) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func
在系统的System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext,IList`1过滤器,ActionResult …
我希望当用作类的成员时,有人可以帮助我理解块的语法.我有一些实际工作正常的代码:
@class Structure;
typedef void (^StructureDeleteCallback)(Structure *);
@interface StructureListDelegate : NRFCTableDelegate
{
StructureDeleteCallback _structureDeleteCallback;
}
@property (nonatomic, copy) StructureDeleteCallback structureDeleteCallback;
@end
Run Code Online (Sandbox Code Playgroud)
这有效,但我想理解typedef
语句的语法; 以及它是否真的需要使用typedef.
我读到的内容typedef
是建议在这种情况下使用,因为它使代码更加清晰; 但是在没有尝试这样做的时候,我一直都无法进行编译typedef
.我对typedef的理解是语法基本上是:
typedef [actual type] [new name for type];
Run Code Online (Sandbox Code Playgroud)
如:
typedef double CLLocationDegrees;
Run Code Online (Sandbox Code Playgroud)
但是我的typedef
语句的语法与此不符.所以我的问题是:
typedef
语句的语法如何与其他typedef
语句如此不同
/我使用的语法实际上对编译器意味着什么?typedef
?我知道从iOS 4开始,现在可以根本不声明iVars,并允许编译器在您合成属性时自动为您创建它们.但是,我找不到Apple关于此功能的任何文档.
此外,是否有关于使用iVars和属性的最佳实践或Apple推荐指南的文档?我总是使用这样的属性:
.h文件
@interface myClass {
NSIndexPath *_indexPath
}
@property(nonatomic, retain) NSIndexPath *indexPath
@end
Run Code Online (Sandbox Code Playgroud)
.m文件
@implementation myClass
@synthesize indexPath = _indexPath;
- (void)dealloc {
[_indexPath release];
}
@end
Run Code Online (Sandbox Code Playgroud)
我使用_indexPath而不是indexPath作为我的iVar名称,以确保我indexPath
在需要使用时不会使用self.indexPath
.但是现在iOS支持自动属性,我不需要担心.但是,如果我省略了iVar声明,我应该如何处理在dealloc中释放它?我被教导在dealloc中释放时直接使用iVars,而不是使用属性方法.如果我在设计时没有iVar,我可以直接调用属性方法吗?
我有一个带有格式标签的字符串,例如There are {adults} adults, and {children} children
.我有一个字典,其中"成人"和"孩子"作为键,我需要查找值并用该值替换宏.这是完全动态的; 键可以是任何东西(所以我不能硬编码stringByReplacingString
).
在过去,我只是通过循环遍历可变字符串并搜索字符来完成类似的事情; 在我去的时候从源字符串中删除我已经搜索过的内容.看起来这正是NSScanner的设计类型,所以我尝试了这个:
NSScanner *scanner = [NSScanner scannerWithString:format];
NSString *foundString;
scanner.charactersToBeSkipped = nil;
NSMutableString *formatedResponse = [NSMutableString string];
while ([scanner scanUpToString:@"{" intoString:&foundString]) {
[formatedResponse appendString:[foundString stringByReplacingOccurrencesOfString:@"{" withString:@""]]; //Formatted string contains everything up to the {
[scanner scanUpToString:@"}" intoString:&foundString];
NSString *key = [foundString stringByReplacingOccurrencesOfString:@"}" withString:@""];
[formatedResponse appendString:[data objectForKey:key]];
}
NSRange range = [format rangeOfString:@"}" options:NSBackwardsSearch];
if (range.location != NSNotFound) {
[formatedResponse appendString:[format substringFromIndex:range.location + 1]];
}
Run Code Online (Sandbox Code Playgroud)
这个问题是,当我的字符串以"{"开头时,扫描仪返回NO,而不是YES.(这是文档所说的应该发生的事情).我是否滥用NSScanner?事实上,scanUpToString
不包括作为其输出的一部分被搜索的字符串似乎使它几乎无用......
这可以轻松更改为我想要的,或者我是否需要使用可变字符串重写并手动搜索字符?
有没有办法做到这一点?我有一组项目,我想从另一组中排除.我知道我可以循环遍历我的集合中的每个项目,只将它添加到我的filteredSet中,如果它不在另一个集合中,但如果我可以使用谓词那么会很好.
要排除的项集不是直接相同类型的对象集; 这是一组字符串; 如果其中一个属性与该字符串匹配,我想从我的第一个集合中排除任何内容....换句话说:
NSMutableArray *filteredArray = [NSMutableArray arrayWithCapacity:self.questionChoices.count];
BOOL found;
for (QuestionChoice *questionChoice in self.questionChoices)
{
found = NO;
for (Answer *answer in self.answers)
{
if ([answer.units isEqualToString:questionChoice.code])
{
found = YES;
break;
}
}
if (!found)
[filteredArray addObject:questionChoice];
}
Run Code Online (Sandbox Code Playgroud)
这可以用谓词来完成吗?
objective-c ×5
ios ×4
android ×2
ios4 ×2
.net ×1
asp.net-mvc ×1
c# ×1
cocoa-touch ×1
conventions ×1
dataadapter ×1
generics ×1
include ×1
iphone ×1
ivars ×1
layout ×1
nspredicate ×1
nsscanner ×1
nsset ×1
nsstring ×1
properties ×1
razor ×1
sqlite ×1
subclass ×1
typedef ×1
xcode ×1
xml ×1